是否可以直接从PreferenceScreen发送广播意图?
例如,我想做类似以下的事情:
<PreferenceScreen android:title="Enable">
<intent android:action="com.otherapp.ENABLE" />
</PreferenceScreen>
但是当我尝试这个时,应用FC的W / ActivityNotFoundException。
BTW,接收器简单定义为:<receiver android:name=".Receiver">
<intent-filter>
<action android:name="com.otherapp.ENABLE" />
</intent-filter>
</receiver>
此广播接收器已经过测试,可以正常使用,但不是来自PreferenceScreen。
TIA!
答案 0 :(得分:5)
您可以扩展Preference
以使其在点击时发送广播:
public class BroadcastPreference extends Preference implements Preference.OnPreferenceClickListener {
public BroadcastPreference(Context context, AttributeSet attrs) {
super(context, attrs);
this.setOnPreferenceClickListener(this);
}
@Override
public boolean onPreferenceClick(Preference preference) {
getContext().sendBroadcast(getIntent());
return true;
}
}
然后在xml文件中使用自定义首选项
<com.app.example.BroadcastPreference android:title="Enable">
<intent android:action="com.otherapp.ENABLE" />
</com.app.example.BroadcastPreference>
答案 1 :(得分:0)
首选项将意图发送到活动,而不是广播接收器。如果要向广播接收者发送意图,请创建将意图转发给广播接收者的活动
public class ForwardingActivity extends Activity {
@Override
protected void onStart() {
super.onStart();
Intent incomingIntent = getIntent();
Intent outgoingIntent = new Intent(incomingIntent);
outgoingIntent.setComponent(null); // unblock recipients
sendBroadcast(outgoingIntent);
}
}
没有用户界面
<activity
android:name=".ForwardingActivity "
android:theme="@android:style/Theme.NoDisplay" >
<intent-filter>
<action android:name="com.otherapp.ENABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
答案 2 :(得分:-2)
我认为,您应该在清单中向android.intent.category.DEFAULT
添加类别intent-filter
。
它应该是这样的:
<receiver android:name=".Receiver">
<intent-filter>
<action android:name="com.otherapp.ENABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>