Sve*_*ven 41 android broadcastreceiver
我尝试使用此PackageManager方法启用和禁用广播接收器:
setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
Run Code Online (Sandbox Code Playgroud)
广播接收器在清单中注册.接收器工作正常,但当我尝试禁用它时,它仍然接收广播消息.当我通过"android:enabled ="false""禁用清单中的接收器时,接收器没有收到任何东西,但我无法启用它.
我从服务中调用该方法.
PackageManager pm = getApplicationContext().getPackageManager();
ComponentName componentName = new ComponentName("com.app",
".broadcast_receivers.OnNetworkChangedReceiver");
pm.setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
Run Code Online (Sandbox Code Playgroud)
Android清单:
<receiver android:name=".broadcast_receivers.OnNetworkChangedReceiver"
android:enabled="true">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
收件人
public class OnNetworkChangedReceiver extends BroadcastReceiver {
private static final String TAG = "OnNetworkChangedReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "in OnNetworkChanged");
}
}
Run Code Online (Sandbox Code Playgroud)
我昨天也从一个Activity中调用了这个方法.我认为它有效,但今天没有任何作品了.可能是因为我昨天误解为禁用接收器的意图(android.net.conn.CONNECTIVITY_CHANGE)有时会有很大的延迟吗?
PackageManager的方法是正确的方向还是想法中存在基本错误?
非常感谢,斯文
Com*_*are 74
那么,你基本上有什么似乎没问题.我的一个项目中有以下代码:
boolean enabled=prefs.getBoolean(key, false);
int flag=(enabled ?
PackageManager.COMPONENT_ENABLED_STATE_ENABLED :
PackageManager.COMPONENT_ENABLED_STATE_DISABLED);
ComponentName component=new ComponentName(EditPreferences.this, OnBootReceiver.class);
getPackageManager()
.setComponentEnabledSetting(component, flag,
PackageManager.DONT_KILL_APP);
Run Code Online (Sandbox Code Playgroud)
BOOT_COMPLETED
当我没有需要安排的任何活动警报时,我用它来禁用接收器.
我的猜测是你ComponentName
没有正确设置(例如,你的领导.
).尝试我正在使用的构造函数,它接受a Context
和a Class
作为参数.
归档时间: |
|
查看次数: |
42473 次 |
最近记录: |