3

マニフェストファイルで放送受信機を登録しています。基本的に、インターネット接続がオン/オフのときにアクティブになります。オンのときもオフのときもトーストが表示されます。

ただし、アプリをバックグラウンドで実行しているとき(ホームボタンが押されているとき)にこのトーストを表示したくありません。どうやってやるの?ブロードキャストがまだ登録されているかどうかは気になりませんが、アプリが表示されていないことを知る方法が必要なので、トーストを無効にします。

どうもありがとうございます

    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();


        }
4

3 に答える 3

3

BaseActivity (もちろんActivityを拡張する)などのアクティビティ作成できます。このアクティビティのonResume ()メソッドとonPause()メソッドでは、Anup Cowkurが回答で行ったように、ブール変数を設定できます。

これで、Activityクラスの代わりにBaseActivityからすべてのアクティビティを拡張できます。したがって、BroadcastReceiverのonReceive()関数では、最初にこのブール変数をチェックして、「true」の場合にのみToastを表示できます。

これらのリンクは非常に役立ちます:

Androidアプリケーションがバックグラウンドで実行されているかどうかを確認する

アプリがバックグラウンドにある場合でもBroadcastReceiverが機能するのはなぜですか?

于 2012-11-21T05:33:02.683 に答える
1

アクティビティでは、onPause()でレシーバーの登録を解除し、onResume()で再度登録します。

@Override
protected void onPause() {
    mLocalBroadcastManager.unregisterReceiver(mReceiver);
    super.onPause();
}

@Override
protected void onResume() {
    mLocalBroadcastManager.registerReceiver(mReceiver, filter);
    super.onResume();
}

デモにはLocalBroadcastManagerを使用していますが、受信者に適したものに変更してください。

于 2012-11-21T03:54:53.297 に答える
1

ブールフラグを使用して、アプリがバックグラウンドにあるかどうかを示します。

boolean appIsInBackgorund = false;
  @Override
    protected void onPause() {
        appIsInBackgorund = true;
        super.onPause();
    }

    @Override
    protected void onResume() {
        appIsInBackgorund = false;
        super.onResume();
    }

これで、このフラグをチェックして、アプリがバックグラウンド状態にあるかどうかを判断し、トーストを表示するかどうかを判断できます。

複数のアクティビティで同じフラグが必要な場合は、SharedPreferencesに保存できます。

于 2012-11-21T05:23:58.707 に答える