Интеграция с использованием подписки на broadcast (для Andriod)¶
- Создать свой broadcast receiver
private PersonsReceiver receiver = new PersonsReceiver();
private class PersonsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
parse(context, intent);
}
}
- Подписать его на события
net.seemetrix.agent.PERSONS
которые приходят каждые 0.5с
IntentFilter filter = new IntentFilter();
filter.addAction("net.seemetrix.agent.PERSONS");
try {
registerReceiver(receiver, filter);
} catch (IllegalArgumentException e){
Log.e("REGISTER EXCEPTION", "Receiver already registered" + e);
}
- Обрабатывать полученные данные в формате json
{
"persons": [
{
"id": int,
"duration": int,
"gender": String,
"age": String
}
]
}
Получение массива с объектами с информацией о людях перед камерой:
Bundle bundle = intent.getExtras();
String jsonstring = bundle.getString("persons");
JSONObject obj = new JSONObject(jsonstring);
jsonarray = obj.getJSONArray("persons");
Каждый объект содержит:
int id = current_person.getInt("id");
id
– идентификатор лица (как только человек появляется перед камерой, он получает идентификатор – число, которое ему будет соответствовать все то время, пока он перед ней находится);
String gender = current_person.getString("gender");
gender
– пол (строка, может принимать значения male, female, undefined);
int duration = current_person.getInt("duration");
duration
- время, в течение которого человек находится перед камерой (в мс);
String age = current_person.getString("age");
age
– возраст (строка, может принимать значения kid, young, adult и senior).
Пример приложения, которое выводит на экран информацию о людях, стоящих перед камерой
package com.example.parseltestapplication;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class MainActivity extends Activity {
private PersonsReceiver receiver = new PersonsReceiver();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onResume() {
super.onResume();
IntentFilter filter = new IntentFilter();
filter.addAction("net.seemetrix.agent.PERSONS");
try {
registerReceiver(receiver, filter);
} catch (IllegalArgumentException e){
Log.e("REGISTER EXCEPTION", "Receiver already registered" + e);
}
}
@Override
protected void onPause() {
super.onPause();
try {
unregisterReceiver(receiver);
} catch (IllegalArgumentException e){
Log.e("UNREGISTER EXCEPTION", "Receiver not registered" + e);
}
}
private class PersonsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
doMyWork(context, intent);
}
private void doMyWork(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
String parse_result = "";
if (bundle != null) {
JSONArray jsonarray;
String jsonstring = bundle.getString("persons");
try {
JSONObject obj = new JSONObject(jsonstring);
jsonarray = obj.getJSONArray("persons");
if (jsonarray != null) {
Log.d("PARSE", "persons count " + jsonarray.length());
for (int i = 0; i < jsonarray.length(); ++i) {
JSONObject current_person = jsonarray.getJSONObject(i);
int id = current_person.getInt("id");
String gender = current_person.getString("gender");
int duration = current_person.getInt("duration");
String age = current_person.getString("age");
parse_result +=
i + " , id " + id + ",
gender " + gender + ",
age " + age + ",
duration " + duration + "\n";
}
Log.d("PARSE", parse_result);
} else {
Log.d("PARSE", "Null array");
}
} catch (JSONException e) {
e.printStackTrace();
}
}
((TextView)findViewById(R.id.info)).setText(parse_result);
}
}
}