0

こんにちは私は場所のサービスを利用している場所にアプリを構築しています。そのサービスは常に動作しなければならないので、サービスが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)); 
    } 

防ぐためにどのようにユーザーがログアウトボタンをクリックすると、私のサービスは再び作成されませんか?前もって感謝します。

答えて

2

ログアウトボタンをクリックしたときにのみ、static boolean変数shouldRestartfalse)を使用できます。それ以外の場合はtrueです。

あなたの活動に追加する:

public static boolean shouldRestart=true

あなたの「ログアウトボタンのクリックイベント」の行に追加:

shouldRestart=false

とサービスのonDestroy方法でこの行を追加:これは動作します

if (MainActivity.shouldRestart){ 
Intent broadcastIntent = new Intent("uk.ac.shef.oak.ActivityRecognition.RestartSensor"); 
    sendBroadcast(broadcastIntent); 
} 
MainActivity.shouldRestart=true; 
+0

を!ありがとう – Atenica

関連する問題