PreferenceActivity和BroadcastReceiver - 实现动态首选项

时间:2012-03-12 12:46:07

标签: java android

我将通过以下代码示例动态构建首选项活动。

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

哦,这是onPause,我正在广播PREFS_UPDATE intent。我确实看到了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 个答案:

答案 0 :(得分:1)

尝试一个简单的Intent

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