所以基本上在我写的这个应用程序中,我有一个设置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总是返回默认值,无论它实际保存为什么。而且我知道它正在保存,因为如果我打开并关闭应用程序并且我可以看到保存设置的日志,则会记住这些设置。我在这里做错了什么?
编辑:添加了清单代码。
由于