2012-03-12 7 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があります。私はlogcatで "WTF"を見ることはありません。私は間違って何をしていますか?

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(); 
     } 
    } 
} 

ああ、ここで私はlogcatのメッセージが表示されないPREFS_UPDATE intent.Iを放送していonPauseです。このメソッドは私の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

関連する問題