Android 禁用广播接收器
我正在尝试为PhoneStateListener添加广播接收器。我已经在舱单上声明了接收人Android 禁用广播接收器,android,broadcastreceiver,Android,Broadcastreceiver,我正在尝试为PhoneStateListener添加广播接收器。我已经在舱单上声明了接收人 <receiver android:name="my.pckname.receiver.IncomingCallReceiver" android:enabled="false" > <intent-filter> <action android:name="android.intent.action.P
<receiver
android:name="my.pckname.receiver.IncomingCallReceiver"
android:enabled="false" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
注意:在我发布这个问题之前,我尝试了类似的解决方案
,但它对我不起作用
编辑:如果我使用0而不是PackageManager.DONT_KILL_应用程序,它会工作,但会关闭应用程序
提前感谢。我认为您的错误在于接收器的创建-类名应该是实现该组件的pkg内部的类名。。所以,在你的情况下,它必须是简单的
我通常在这个方法上使用另一种形式,向它传递一个类-我的解决方案是在java代码中注册和取消注册listener IncomingCallReceiver。 接收者可以通过Android清单文件注册。您还可以在运行时通过Context.registerReceiver和Context.unregisterReceiver方法注册和注销接收器。
您可以在中看到示例我认为ComponentName不是问题,因为我能够启用接收器,禁用接收器是我的问题。我也尝试过传递上下文和cls名称,但仍然存在相同的问题。
<PreferenceCategory android:title="Title here" >
<CheckBoxPreference
android:key="allow_calls_from_circle"
android:summary="Summary here"
android:title="This a title" />
<EditTextPreference
android:dialogTitle="Title here"
android:key="default_sms_body"
android:summary="Summary here"
android:title="Title here"
android:dependency="allow_calls_from_circle"
/>
</PreferenceCategory>
public class Settings extends SherlockPreferenceActivity implements
OnPreferenceClickListener {
private static final String TAG = Settings.class.getSimpleName();
CheckBoxPreference allowCallsFromCircle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// deprecated no replacement API level below 13
addPreferencesFromResource(R.xml.settings);
allowCallsFromCircle = (CheckBoxPreference) findPreference("allow_calls_from_circle");
allowCallsFromCircle.setOnPreferenceClickListener(this);
}
@Override
public boolean onPreferenceClick(Preference preference) {
Log.d(TAG, "onPreferenceClick");
ComponentName component = new ComponentName(getBaseContext(),
IncomingCallReceiver.class);
int status = getPackageManager().getComponentEnabledSetting(component);
Log.d(TAG, "status" + status);
if ((status == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT && allowCallsFromCircle
.isChecked())
|| (status == PackageManager.COMPONENT_ENABLED_STATE_DISABLED && allowCallsFromCircle
.isChecked())) {
getPackageManager().setComponentEnabledSetting(component,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
Log.d(TAG, "enabled");
} else if (status == PackageManager.COMPONENT_ENABLED_STATE_ENABLED
&& !allowCallsFromCircle.isChecked()) {
getPackageManager().setComponentEnabledSetting(component,
PackageManager.COMPONENT_ENABLED_STATE_DEFAULT,
PackageManager.DONT_KILL_APP);
Log.d(TAG, "disabled");
}
return true;
}}