BroadcastReceiver在启动app之前无法获得共享偏好

时间:2014-08-05 14:50:28

标签: android broadcastreceiver sharedpreferences

所以基本上在我写的这个应用程序中,我有一个设置Activity,让用户保存setinngs。其中一个设置是用户是否希望在设备连接电源时启动应用程序。我使用以下代码保存我的SettingsActivity中的首选项:

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) 
{
    Log.d("DEBUG", "Preference Changed-Settings");
    if (key.equals("pref_onCharge")) {

        // Set summary to be the user-description for the selected value
        scanCharge = sharedPreferences.getBoolean(key, true);
    }else if (key.equals("pref_onAlways")) {

        // Set summary to be the user-description for the selected value
        scanAlways = sharedPreferences.getBoolean(key, false);
    }
}

@Override
public void finish()
{
    super.finish();
    SharedPreferences pref = getSharedPreferences("MySettings", Context.MODE_MULTI_PROCESS);
    SharedPreferences.Editor prefedit = pref.edit();
    prefedit.remove("onCharge");
    prefedit.remove("onAlways");
    prefedit.putBoolean("onCharge", scanCharge);
    prefedit.putBoolean("onAlways", scanAlways);
    prefedit.commit();
    Log.d("DEBUG", "Preference Saved-Settings");

}

然后在我的BroadcastReceiver中,我检查sharedPreferences以查看" onCharge"在开始活动之前设置为true。

public class MyBroadcastReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent)
    {
        if(intent.getAction().equals(Intent.ACTION_POWER_CONNECTED))
        {

            if(context.getSharedPreferences("MySettings", Context.MODE_MULTI_PROCESS).getBoolean("onCharge", true))
            {
                Log.d("DEBUG","onCharge - Receiver");
                Toast.makeText(context,  "Connected to Power" , Toast.LENGTH_LONG).show();
                Intent i = new Intent(context, MainActivity.class);
                i.putExtra(context.getString(R.string.intent_source), context.getString(R.string.power_source));
                i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(i);
            }
        }
    }       
}

这是清单:

        <activity
            android:name="com.hpconcept.miracastconnector.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
                <!--  <data android:scheme="pluggedin" /> -->
            </intent-filter>
        </activity>
        <activity
            android:name="com.hpconcept.miracastconnector.SettingsActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.SETTINGS" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

        <receiver android:name="MyBroadcastReceiver">
            <intent-filter>
                    <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
                    <category android:name="android.intent.category.HOME" />
            </intent-filter>

        </receiver>

问题是sharedPreferences总是返回默认值,无论它实际保存为什么。而且我知道它正在保存,因为如果我打开并关闭应用程序并且我可以看到保存设置的日志,则会记住这些设置。我在这里做错了什么?

编辑:添加了清单代码。

由于

0 个答案:

没有答案