Android 单击按钮启用和禁用广播接收器
我想在单击按钮时启用和禁用广播接收器以完成引导。。只有单击一次按钮,接收器才会响应。我确实看到了一些类似的问题,但没有一个答案奏效。。请帮忙 我试过这个代码,但没用Android 单击按钮启用和禁用广播接收器,android,broadcastreceiver,Android,Broadcastreceiver,我想在单击按钮时启用和禁用广播接收器以完成引导。。只有单击一次按钮,接收器才会响应。我确实看到了一些类似的问题,但没有一个答案奏效。。请帮忙 我试过这个代码,但没用 PackageManager pm = getApplicationContext().getPackageManager(); ComponentName componentName = new ComponentName("mypackage", ".receivername"); pm.setComponentEnabled
PackageManager pm = getApplicationContext().getPackageManager();
ComponentName componentName = new ComponentName("mypackage", ".receivername");
pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
示例代码,您可以在中注册您的接收器onCreate方法和onDestroy方法取消注册它
private BroadcastReceiver receiver;
@Overrride
public void onCreate(Bundle savedInstanceState){
// your oncreate code
IntentFilter filter = new IntentFilter();
filter.addAction("SOME_ACTION");
filter.addAction("SOME_OTHER_ACTION");
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//do something based on the intent's action
}
}
registerReceiver(receiver, filter);
}
记住要在onDestroy方法中运行此操作:
@Override
protected void onDestroy() {
unregisterReceiver(receiver); //unregisterReceiver can be anywhere based on your requirement
}
试试这个:
YourBroadcastReceiver mReceiver = new YourBroadcastReceiver();
IntentFilter filter = new IntentFilter(); //Filter for your receiver...
filter.addAction(your action goes here...);
registerReceiver(mReceiver , filter); **// Register**
unregisterReceiver(mReceiver ); **// Unregister**
试试这个
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
PackageManager pm = Re_editActivity.this.getPackageManager();
ComponentName componentName = new ComponentName(currentActivity.this, name_of_your_receiver.class);
pm.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
Toast.makeText(getApplicationContext(), "activated", Toast.LENGTH_LONG).show();
}
});
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
PackageManager pm = Re_editActivity.this.getPackageManager();
ComponentName componentName = new ComponentName(currentActivity.this, name_of_your_receiver.class);
pm.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
Toast.makeText(getApplicationContext(), "cancelled", Toast.LENGTH_LONG).show();
}
});
此处按钮1用于激活广播接收器,按钮2用于停用广播接收器
你还需要在清单文件中注册你的广播接收器并设置
<receiver android:name="name_of_your_receiver" android:enabled="false">
<intent-filter >
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
我认为这样使用更容易:
public static void setAppComponentEnabled(@NonNull final Context context, @NonNull final Class<?> componentClass, final boolean enable) {
final PackageManager pm = context.getPackageManager();
final int enableFlag = enable ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
pm.setComponentEnabledSetting(new ComponentName(context, componentClass), enableFlag, PackageManager.DONT_KILL_APP);
}
public static void setAppComponentEnabled(@NonNull final Context Context,@NonNull final Class componentClass,final boolean enable){
final-PackageManager pm=context.getPackageManager();
final int enableFlag=enable?PackageManager.COMPONENT_ENABLED_STATE_ENABLED:PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
setComponentEnabledSetting(新的ComponentName(上下文,componentClass),enableFlag,PackageManager.DONT_KILL_APP);
}
如果您已经找到了解决方案,请接受/投票支持答案:)谢谢您的时间和努力。。我试过这个按钮点击,但没有工作。。。