Ada*_*own 15 android broadcastreceiver
我有一个广播接收器,它在注册时被触发(随后用onPause/onResume重新触发),这肯定是错误的行为?我错过了什么吗?
class FooActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
broadcastReceiver = new FooBroadcastReceiver();
intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
}
@Override
protected void onResume() {
super.onResume();
registerReceiver(connectivityReceiver, intentFilter);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(connectivityReceiver);
}
class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (connectivityAction(intent)) {
Log.d("footag", "onReceive");
}
}
private boolean connectivityAction(Intent intent) {
return ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction());
}
}
Run Code Online (Sandbox Code Playgroud)
Dav*_*ser 16
该CONNECTIVITY_ACTION广播似乎在某些设备上粘(即使文档意味着它不是).这意味着当您注册接收器时,它将立即onReceive()使用最近发送的广播进行呼叫.由于您正在注册和取消注册,onPause()因此onResume()您将收到很多电话onReceive().您可能希望以不同的方式执行此操作.
Ada*_*own 11
谢谢你的回答!我的解决方案是他们所有的结果,通过切换到清单声明的接收器并在onResume/onPause中启用/禁用接收器组件停止了接收器的粘性.通过启用/禁用组件,我可以放心,我是二等公民.
@Override
protected void onResume() {
super.onResume();
setReceiverState(PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
}
@Override
protected void onPause() {
super.onPause();
setReceiverState(PackageManager.COMPONENT_ENABLED_STATE_DISABLED);
}
private void setReceiverState(int receiverState) {
ComponentName receiver = new ComponentName(this, FooBroadcastReceiver.class);
PackageManager pm = this.getPackageManager();
pm.setComponentEnabledSetting(receiver, receiverState,
PackageManager.DONT_KILL_APP);
}
Run Code Online (Sandbox Code Playgroud)
AndroidManifest.xml中
<receiver android:name="com.example.receiver.FooBroadcastReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5213 次 |
| 最近记录: |