Отправить намерение трансляции с PreferenceScreen? - PullRequest
2 голосов
/ 13 сентября 2011

Можно ли напрямую отправить намерение трансляции с экрана 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.

ТИА!

Ответы [ 3 ]

5 голосов
/ 28 мая 2013

Вы можете расширить 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>
0 голосов
/ 15 марта 2013

Настройки отправляют намерения деятельности, а не широковещательным получателям. Если вы хотите отправить намерения широковещательным получателям, создайте действие, которое перенаправляет намерения широковещательным получателям

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>
0 голосов
/ 22 мая 2012

Я думаю, вам следует добавить категорию 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>
...