![](/img/trans.png)
[英]How to active Broadcast Receiver only when APP is in background in android?
[英]broadcast receiver not active when app in background
我有一個通過清單文件注冊的廣播接收器。 基本上,當互聯網連接開啟/關閉時,它會激活。 它會在Toast出現時以及在它關閉時顯示Toast。
但是,當我的應用程序在后台(按下主頁按鈕)時,我不希望顯示此Toast。 我怎樣才能做到這一點? 我不介意廣播是否仍然注冊,但我需要一種方法來了解我的應用程序是不可見的所以我禁用了Toast。
非常感謝你
ConnectivityManager connManager = (ConnectivityManager)context.getSystemService(context.CONNECTIVITY_SERVICE);
NetworkInfo active_nwInfo = (NetworkInfo) connManager.getActiveNetworkInfo();
if(active_nwInfo == null || !active_nwInfo.isConnected()) {
//broadcast.putExtra("action", "no_connection");
Toast.makeText(context, "No Internet Connection", Toast.LENGTH_LONG).show();
}else {
//broadcast.putExtra("action", "new_connection");
Toast.makeText(context, "Internet Connection", Toast.LENGTH_LONG).show();
}
您可以創建一個Activity,例如BaseActivity (擴展Activity ofcourse)。 在此Activity的onResume()和onPause()方法中,您可以設置一個布爾變量,就像Anup Cowkur在他的答案中所做的那樣。
現在,您可以從BaseActivity而不是Activity類擴展所有活動 。 因此,在BroadcastReceiver的 onReceive()函數中,您可以先檢查此布爾變量,並僅在Toast為“true”時顯示Toast。
這些鏈接非常有用:
在您的活動中,在onPause()上取消注冊您的接收器,並在onResume()上再次注冊它
@Override
protected void onPause() {
mLocalBroadcastManager.unregisterReceiver(mReceiver);
super.onPause();
}
@Override
protected void onResume() {
mLocalBroadcastManager.registerReceiver(mReceiver, filter);
super.onResume();
}
我只是使用LocalBroadcastManager進行演示,將其更改為適合您的接收器的那個。
使用布爾標志來指示app是否在后台:
boolean appIsInBackgorund = false;
@Override
protected void onPause() {
appIsInBackgorund = true;
super.onPause();
}
@Override
protected void onResume() {
appIsInBackgorund = false;
super.onResume();
}
現在,您可以檢查此標志以確定應用程序是否處於后台狀態,並確定是否顯示您的祝酒詞。
如果您需要在多個活動中使用相同的標志,則可以將其存儲在SharedPreferences中 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.