私のアプリは、2 つのサービスを呼び出すことから始めます。1 つは位置データを収集するサービスで、もう 1 つはそのデータの計算を実行するサービスで、特定の地点で数十時間ごとに近接アラートを開始します。私の問題は、ユーザーが関心のある領域に出入りすると、調査活動を呼び出すために近接アラートを取得していることです。Survey が表示されますが、Survey アクティビティで finish() を呼び出すと、アプリはホーム画面に戻り、アプリを再開すると、Survey アクティビティに戻ります。これが多くの近接アラートを呼び出しているためかどうかはわかりませんが、私が歩き回っているときにそれぞれが調査アクティビティを呼び出した可能性があるため、多数の調査アクティビティが発生する可能性がありますが、その理由については意味がありません終了するとホーム画面に移動します。
これが近接アラートと呼ばれる場所です。
private BroadcastReceiver mLocationUpdateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
proxsiglocList = intent.getParcelableArrayListExtra("Locations");
for (int l = 0; l < proxsiglocList.size(); l++) {
addProximityAlert(proxsiglocList.get(l).getLatitude(),
proxsiglocList.get(l).getLongitude());
}
proxsiglocList.clear();
}
};
public void addProximityAlert(double latitude, double longitude) {
LocationManager locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Intent intent = new Intent(PROX_ALERT_INTENT + latitude + longitude);
intent.putExtra("lat", latitude);
intent.putExtra("lng", longitude);
PendingIntent proximityIntent = PendingIntent.getBroadcast(this, 0,
intent, 0);
locManager.addProximityAlert(latitude, longitude, POINT_RADIUS,
PROX_ALERT_EXPIRATION, proximityIntent);
IntentFilter filter = new IntentFilter(PROX_ALERT_INTENT + latitude
+ longitude);
registerReceiver(new ProximityIntentReceiver(), filter);
}
これは、ProximityAlerts から Surveys を呼び出す場所です。
@Override
public void onReceive(Context context, Intent intent) {
String key = LocationManager.KEY_PROXIMITY_ENTERING;
Boolean entering = intent.getBooleanExtra(key, false);
double latitude = intent.getDoubleExtra("lat", -1);
double longitude = intent.getDoubleExtra("lng", -1);
if (entering) {
int id = 0;
int updated = 0;
LabelDatabase myDatabase = new LabelDatabase(context);
myDatabase.open();
Cursor cursor = myDatabase.getAllRows();
cursor.moveToFirst();
for (int i = 0; i < cursor.getCount(); i++) {
if ((cursor.getDouble(1) == latitude)
&& (cursor.getDouble(2) == longitude)) {
id = cursor.getInt(0);
updated = cursor.getInt(4);
break;
}
cursor.moveToNext();
}
if (updated != 1) {
myDatabase.updateAsked(id);
Intent surveyIntent = new Intent(context, Survey.class);
surveyIntent.putExtra("id", id);
surveyIntent.putExtra("lat", latitude);
surveyIntent.putExtra("lng", longitude);
surveyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(surveyIntent);
}
myDatabase.close();
} else {
int id = 0;
int updated = 0;
LabelDatabase myDatabase = new LabelDatabase(context);
myDatabase.open();
Cursor cursor = myDatabase.getAllRows();
cursor.moveToFirst();
for (int i = 0; i < cursor.getCount(); i++) {
if ((cursor.getDouble(1) == latitude)
&& (cursor.getDouble(2) == longitude)) {
id = cursor.getInt(0);
updated = cursor.getInt(4);
break;
}
cursor.moveToNext();
}
if (updated != 1) {
myDatabase.updateAsked(id);
Intent surveyIntent = new Intent(context, Survey.class);
surveyIntent.putExtra("id", id);
surveyIntent.putExtra("lat", latitude);
surveyIntent.putExtra("lng", longitude);
surveyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(surveyIntent);
}
myDatabase.close();
}
}
これは私の調査活動の一部です:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.location_survey);
Bundle extras = getIntent().getExtras();
if (extras != null) {
id = extras.getInt("id");
lat = extras.getDouble("lat");
lng = extras.getDouble("lng");
}
// Add in the three spinners
whereSpinner = (Spinner) findViewById(R.id.answer1);
ArrayAdapter<CharSequence> whereAdapter = ArrayAdapter
.createFromResource(this, R.array.where_array,
android.R.layout.simple_spinner_item);
whereAdapter
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
whereSpinner.setAdapter(whereAdapter);
whoSpinner = (Spinner) findViewById(R.id.answer3);
ArrayAdapter<CharSequence> whoAdapter = ArrayAdapter
.createFromResource(this, R.array.who_array,
android.R.layout.simple_spinner_item);
whoAdapter
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
whoSpinner.setAdapter(whoAdapter);
}
// remove row and proximity alert
public void onNotSigClicked(View v) {
LocationManager locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
LabelDatabase myDatabase = new LabelDatabase(getBaseContext());
myDatabase.open();
myDatabase.deleterow(id);
myDatabase.close();
Intent intent = new Intent(PROX_ALERT_INTENT + lat + lng);
PendingIntent proximityIntent = PendingIntent.getBroadcast(this, 0,
intent, 0);
locManager.removeProximityAlert(proximityIntent);
finish();
}
public void onSaveClicked(View v) {
// Save profile
saveProfile();
finish();
}
繰り返しになりますが、調査アクティビティまたはアクティビティがホーム画面に移動し続ける理由がわかりません。戻るたびに、finish() を呼び出しているにもかかわらず、調査アクティビティに戻ってしまいます。これは、最初の調査アクティビティに遭遇したときにのみうまく機能し、finish() を呼び出すと、MainActivity に戻ります。