Я собираюсь использовать следующий пример кода для динамического создания активности предпочтений.PreferenceActivity и BroadcastReceiver - реализация динамических настроек
Диалог показывает предпочтения, но я не в состоянии увидеть какие-либо изменения после его закрытия.
Вот где я определяю свою деятельность в AndroidManifest.xml
<activity
android:name="PreferencesActivity" android:label="@string/preferences_name">
</activity>
Вот где я определяю приемник.
<receiver
android:name="FroyVisualReceiver"
android:label="@string/app_name"
android:exported="false">
<intent-filter>
<action android:name="com.starlon.froyvisuals.PREFS_UPDATE"/>
</intent-filter>
</receiver>
И вот BroadcastReceiver. Я никогда не вижу «WTF» в logcat. Что я делаю не так?
package com.starlon.froyvisuals;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.Context;
import android.util.Log;
public class FroyVisualsReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Log.e("WTFWTF", "WTFWTFWTFW");
String action = intent.getAction();
if(action.equals("com.starlon.froyvisuals.PREFS_UPDATE"))
{
((FroyVisuals)context).updatePrefs();
}
}
}
О вот OnPause где я транслирует PREFS_UPDATE intent.I видим сообщение LogCat. Этот метод является частью моей PreferenceActivity.
/** another activity comes over this activity */
@Override
public void onPause()
{
Log.i(TAG, "onPause ================================ ");
super.onPause();
Intent i = new Intent(this, FroyVisualsReceiver.class);
i.setAction("com.starlon.froyvisuals.PREFS_UPDATE");
sendBroadcast(i);
}
Редактировать: Я думаю, что это может иметь отношение к этой линии. 'this' указывает на мою PreferenceActivity.
Intent i = new Intent(this, FroyVisualsReceiver.class);
Я думаю, что работал, но линия '((FroyVisuals) контекст) .updatePrefs()' разбивает его, с 'E/AndroidRuntime (8545) : java.lang.RuntimeException: не удается запустить ресивер com.starlon.froyvisuals.FroyVisualsReceiver: java.lang.ClassCastException: android.app.ReceiverRestrictedContext ' – Scott
Хотя это немного не связано с исходной проблемой, я думаю. :) – Scott
@Scott Контекст, который вы пытаетесь использовать как «FroyVisuals», не совсем то, что вы ожидаете. С активностью, зарегистрированной «BroadcastReceiver», контекст в методе 'onReceive' является контекстом этой активности, но для набора трансляции, установленного в манифесте, я не знаю, какой контекст вы получаете (может быть, контекст приложения?). И я не понимаю, что вы пытаетесь обновить в «FroyVisuals». – Luksprog