2

是否可以直接从 PreferenceScreen 发送广播意图?

例如,我想做如下的事情:

<PreferenceScreen android:title="Enable">
<intent android:action="com.otherapp.ENABLE" />
</PreferenceScreen>

但是当我尝试这个时,应用程序 FC 的 w/ActivityNotFoundException。

顺便说一句,接收器被简单地定义为:

<receiver android:name=".Receiver">
<intent-filter>
<action android:name="com.otherapp.ENABLE" />
</intent-filter>
</receiver>

这个广播接收器已经过测试可以正常工作,但不是来自 PreferenceScreen。

蒂亚!

4

3 回答 3

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>
于 2013-05-27T20:21:47.310 回答
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>
于 2013-03-14T22:24:14.477 回答
-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>
于 2012-05-21T22:31:43.560 回答