我在我的android應用程序的清單文件中聲明瞭廣播接收。一切正常。但是,當應用程序關閉時(通過Android設置中的「強制停止」按鈕),廣播接收器仍會響應廣播並再次啓動我的應用程序。Android在應用程序關閉時禁用BroadcastReceiver
有關如何阻止此問題的任何想法?
感謝
我在我的android應用程序的清單文件中聲明瞭廣播接收。一切正常。但是,當應用程序關閉時(通過Android設置中的「強制停止」按鈕),廣播接收器仍會響應廣播並再次啓動我的應用程序。Android在應用程序關閉時禁用BroadcastReceiver
有關如何阻止此問題的任何想法?
感謝
已經有一個answer。
基本上,您可以通過應用程序類的onDestroy方法中的PackageManager禁用廣播接收器,並在Application類的onCreate方法中再次啓用它。
呼叫unregisterReceiver在活動的方法的onDestroy和的onPause()。 在onCreate()和OnResume()中註冊它。
正如在問題中提到,我使用的清單給我的接收機。 – jtnire 2012-03-23 12:17:42
應用程序沒有onDestroy方法。它有onTerminate但它從來不叫=(
這裏是我的解決方案。我有MainActivity在我的應用程序,它肯定有,如果應用程序的工作是積極的。因此,在廣播接收器,我總是檢查是否MainActiviy運行。
public void onReceive(final Context context, final Intent intent){
if(isAppRunning(context)){
// Do my handling
}
else{
// You can disable receiver here
Log.w(LOGTAG, "App not running. Ignore " + LOGTAG + " call.");
}
}
protected boolean isAppRunning(Context context){
String activity = MainActivity.class.getName();
ActivityManager activityManager = (ActivityManager)context.
getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> tasks = activityManager.
getRunningTasks(Integer.MAX_VALUE);
for(RunningTaskInfo task : tasks){
if(activity.equals(task.baseActivity.getClassName())){
return true;
}
}
return false;
}
謝謝,這個工作,但是這是應該做的正確的事嗎? – jtnire 2012-03-23 12:17:22