2012-03-12 3 views
0

Я собираюсь использовать следующий пример кода для динамического создания активности предпочтений.PreferenceActivity и BroadcastReceiver - реализация динамических настроек

http://www.linuxtopia.org/online_books/android/devguide/guide/samples/ApiDemos/src/com/example/android/apis/app/PreferencesFromCode.html

Диалог показывает предпочтения, но я не в состоянии увидеть какие-либо изменения после его закрытия.

Вот где я определяю свою деятельность в 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); 

ответ

1

Попробуйте простой Intent:

Intent i = new Intent(); 
i.setAction("com.starlon.froyvisuals.PREFS_UPDATE"); 
sendBroadcast(i); 
+0

Я думаю, что работал, но линия '((FroyVisuals) контекст) .updatePrefs()' разбивает его, с 'E/AndroidRuntime (8545) : java.lang.RuntimeException: не удается запустить ресивер com.starlon.froyvisuals.FroyVisualsReceiver: java.lang.ClassCastException: android.app.ReceiverRestrictedContext ' – Scott

+0

Хотя это немного не связано с исходной проблемой, я думаю. :) – Scott

+0

@Scott Контекст, который вы пытаетесь использовать как «FroyVisuals», не совсем то, что вы ожидаете. С активностью, зарегистрированной «BroadcastReceiver», контекст в методе 'onReceive' является контекстом этой активности, но для набора трансляции, установленного в манифесте, я не знаю, какой контекст вы получаете (может быть, контекст приложения?). И я не понимаю, что вы пытаетесь обновить в «FroyVisuals». – Luksprog

Смежные вопросы