(与我刚才发布的其他问题略有不同,如果违反规则,请谅解)
在我的第一个活动中,我正在设置一些共享首选项,然后通过意图启动另一个活动2,并从sharedpreferences
设置一些文本视图...这一切都很顺利。
这是我的问题。
在我的第一个活动中,我有一个带有挂起意向的alarmmanger
,这个挂起意向是一个广播接收器,用于锁定手机,然后启动activity2。这个活动是上面提到的同一个第二个活动。然而,当从broadcastreceiver
启动此活动时,没有任何文本视图从sharedpreferences
中加载。这只发生在从broadcastreceiver
启动activity2时。
SharedPreference
在第一个活动中设置为
SharedPreferences lockPreferences = getSharedPreferences("lockprefs", Context.MODE_PRIVATE);
它们在activity2中的访问方式相同。
SharedPreferences lockPreferences = getSharedPreferences("lockprefs", Context.MODE_PRIVATE);
当从广播接收器启动activity2时,没有加载任何sharedprefs。
broadcastreceiver
位于不同的包名中,我将其移动到与活动相同的包中进行测试,但没有任何区别。
这让我发疯了,请帮帮我!谢谢。
编辑:
我有一个GCMIntentService,这是我设置共享偏好的地方(基于从GCM接收到的值)(我只包含相关代码)。
我可以使用getString等方法。
public class GcmIntentService extends IntentService {
public static final String PREFERENCE_NAME = "lockPreference";
@Override
protected void onHandleIntent(Intent intent) {
SharedPreferences lockPreference = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor lockPrefsEditor;
lockPrefsEditor = lockPreference.edit();
lockPrefsEditor.putString("newpassword", newpassword);
lockPrefsEditor.commit();
现在如果我启动activity2,共享首选项将被正确读取。 但是,当首先尝试从broadcastreceiver访问时,它不起作用。
这是一个测试接收器:
package com.myapp;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.util.Log;
import android.widget.Toast;
public class test extends BroadcastReceiver {
public static final String TAG = "myapp";
public static String newpassword = "";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG,"test receiver");
SharedPreferences lockPreference = context.getSharedPreferences(GcmIntentService.PREFERENCE_NAME, Context.MODE_PRIVATE);
newpassword = lockPreference.getString("newpassword", "");
Log.i(TAG, "Password from shared prefs: " + newpassword);
Toast.makeText(context, "Sharedprefs password:" + newpassword, Toast.LENGTH_SHORT).show();
}
}
这是一个Toast提示:“Sharedprefs密码:”
这是activity2,可以轻松读取偏好设置。
public class Activity2 extends Activity {
String newpassword;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.set);
//retrieve shared prefs
SharedPreferences lockPreference = getSharedPreferences(GcmIntentService.PREFERENCE_NAME, Context.MODE_PRIVATE);
newpassword = lockPreference.getString("newpassword", "");
我可以制作烤面包片或其他东西。
我不明白为什么广播接收器会失败,它的上下文不是一样的吗?