簡體   English   中英

廣播接收器在后台應用程序時不活動

[英]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。

這些鏈接非常有用:

檢查Android應用程序是否在后台運行

為什么BroadcastReceiver即使應用程序處於后台也能正常工作?

在您的活動中,在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM