应用程序内的BroadcastReceiver

Ris*_*ava 7 android broadcastreceiver android-broadcast

任何人都可以告诉我一种创建应用程序内BroadcastReceiver的方法吗?我创建了BroadcastReceiver,它可以播放一条消息.它甚至在应用程序处于后台状态时也能工作,我希望它只在应用程序处于前台时才能工作.

  public class MainActivity extends Activity {

            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                this.registerReceiver(this.mConnReceiver, new IntentFilter(
                        ConnectivityManager.CONNECTIVITY_ACTION));
            }

            private BroadcastReceiver mConnReceiver = new BroadcastReceiver() {

                public void onReceive(Context context, Intent intent) {
                    boolean noConnectivity = intent.getBooleanExtra(
                            ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
                    String reason = intent
                            .getStringExtra(ConnectivityManager.EXTRA_REASON);
                    boolean isFailover = intent.getBooleanExtra(
                            ConnectivityManager.EXTRA_IS_FAILOVER, false);

                    NetworkInfo currentNetworkInfo = (NetworkInfo) intent
                            .getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
                    NetworkInfo otherNetworkInfo = (NetworkInfo) intent
                            .getParcelableExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO);

                    if (currentNetworkInfo.isConnected()) {
                        System.out.println("Connected");
                        Toast.makeText(getApplicationContext(), "Connected",
                                Toast.LENGTH_LONG).show();
                    } else {
                        System.out.println("Not Connected");
                        Toast.makeText(getApplicationContext(), "Not Connected",
                                Toast.LENGTH_LONG).show();
                    }
                }
            };

        }

So here is my code which is checking network state and generating a BroadcastReceiver. I haven't added anything in manifest.
Run Code Online (Sandbox Code Playgroud)

Dav*_*ser 2

有多种方法可以做到这一点。我能想到的前两个是这样的:

  1. 如果您<receiver>在清单中使用 进行声明<intent-filter>,则可以从应用程序中启用和禁用它,以便仅当应用程序位于前台时才启用它。为此,首先通过添加到 的android:enabled="false"清单条目来将接收器设置为禁用<receiver>。现在,当您的应用程序运行时,onResume()您想要启用接收器。用于PackageManager.setComponentEnabledSetting()执行此操作。当您的活动进入后台时,onPause()您可以再次禁用接收器。

  2. 动态注册和取消注册接收者。为此,您不需要在清单中声明接收者。在您的应用程序中,创建一个实例BroadcastReceiver并使用适当的意图过滤器onResume()进行调用registerReceiver()。当应用程序进入后台时,调用onPause()unregisterReceiver()其删除。onReceive()仅当应用程序位于前台时,接收方才会收到呼叫。