こんにちは私は場所のサービスを利用している場所にアプリを構築しています。そのサービスは常に動作しなければならないので、サービスがonDestroyになると、サービスを再び開始するBroadcastReceiverに意図が送信され、その方法ではいつも私のサービスが機能します。しかし、ユーザーがボタンのログアウトをクリックしたときにサービスを停止したい。それを防ぐには、サービスがonDestroyに行くときに、ブロードキャストに意図を送信しないでください(ただし、ユーザーがログアウトをクリックしたときのみ)。 これはMainActivityから私のログアウトです:ログアウトボタンからサービスを停止する方法はありますか?
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_log_out) {
if (isNetworkConnected()) {
unsubscribingFromFirebase();
removeTokenAndAccountFromSharedPreferences();
stopService(mServiceIntent);
Log.i("MAIN_ACTIVITY", "Logout!");
Log.d("MAIN_ACTIVITY " , "Internet access ");
}
else {
Toast.makeText(getApplicationContext(), getResources().getString(R.string.need_internet), Toast.LENGTH_SHORT).show();
}
}
は、これらのメソッドonStartCommand、ロケーションサービス内のonCreateとonDestroyです:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("onStartCommand" , "LocationService");
return START_STICKY;
}
@Override
public void onCreate() {
super.onCreate();
isEnded = false;
mRequestingLocationUpdates = false;
mLastUpdateTime = "";
Bugsnag.init(this, BUGSNAG_API_KEY);
buildGoogleApiClient();
Log.d("onCreateService", "onCreateService");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.i("EXIT", "onDestroy!");
timeWhenServiceDestroyed = DateFormat.getTimeInstance().format(new Date());
SharedPreferences sharedPreferences = getSharedPreferences(getResources().getString(R.string.user_location), MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("onDestroyService", timeWhenServiceDestroyed);
editor.apply();
stopLocationUpdates();
Log.d("onDestroyService", "onDestroy: + " + timeWhenServiceDestroyed);
Intent broadcastIntent = new Intent("uk.ac.shef.oak.ActivityRecognition.RestartSensor");
sendBroadcast(broadcastIntent);
}
そして、これは私のBroadCastReceiverです:
@Override
public void onReceive(Context context, Intent intent) {
Log.i(LocationServiceRestartBroadcastReceiver.class.getSimpleName(), "Service Stops! Oooooooooooooppppssssss!!!!");
context.startService(new Intent(context, LocationService.class));
}
防ぐためにどのようにユーザーがログアウトボタンをクリックすると、私のサービスは再び作成されませんか?前もって感謝します。
を!ありがとう – Atenica