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)
有多种方法可以做到这一点。我能想到的前两个是这样的:
如果您<receiver>在清单中使用 进行声明<intent-filter>,则可以从应用程序中启用和禁用它,以便仅当应用程序位于前台时才启用它。为此,首先通过添加到 的android:enabled="false"清单条目来将接收器设置为禁用<receiver>。现在,当您的应用程序运行时,onResume()您想要启用接收器。用于PackageManager.setComponentEnabledSetting()执行此操作。当您的活动进入后台时,onPause()您可以再次禁用接收器。
动态注册和取消注册接收者。为此,您不需要在清单中声明接收者。在您的应用程序中,创建一个实例BroadcastReceiver并使用适当的意图过滤器onResume()进行调用registerReceiver()。当应用程序进入后台时,调用onPause()将unregisterReceiver()其删除。onReceive()仅当应用程序位于前台时,接收方才会收到呼叫。
| 归档时间: |
|
| 查看次数: |
846 次 |
| 最近记录: |