【问题标题】:accessing shared preferences from broadcast receiver从广播接收器访问共享首选项
【发布时间】:2015-06-19 19:14:26
【问题描述】:

这是来自主要活动的点击事件。 s3 是我想在来电到达时在广播接收器中使用的编辑文本值。

 public void clicksave(View shilpa)
 {
   SharedPreferences sharedPreferences = getSharedPreferences("my_prefs", MODE_PRIVATE);
   SharedPreferences.Editor editor = sharedPreferences.edit();
   editor.putString("message", s3);
   editor.commit();
}

这就是我在广播接收器中用来访问 s3 值的方法:

String pref = PreferenceManager.getDefaultSharedPreferences(context).getString("message", "Does not exist");

但是当我试图在这里获得价值时,它是“不存在”而不是正确的价值。请告诉我哪里出错了

【问题讨论】:

标签: android broadcastreceiver sharedpreferences


【解决方案1】:

我终于找到了解决办法

在主要活动中:

 SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE); 
   Editor editor = pref.edit();
   editor.putString("message", message);
   editor.commit();

在广播接收器中:

SharedPreferences pref = context.getSharedPreferences("MyPref", context.MODE_PRIVATE); 
        String a=pref.getString("message", null);

【讨论】:

    【解决方案2】:

    在广播接收器中试试这个

    SharedPreferences pref = context.getSharedPreferences("my_prefs", Context.MODE_PRIVATE); 
    

    【讨论】:

      【解决方案3】:

      您可以像这样从广播接收器访问您的共享偏好

      @Override
      public void onReceive(Context arg0, Intent arg1) {
          SharedPreferences prefs = arg0.getSharedPreferences("myPrefs", 
                                                          Context.MODE_PRIVATE);
      }
      

      注意

      <receiver android:name="MySmsReceiver" android:process=":remote" />
      

      如果您使用的是 android:process=":remote" 那么您可能需要删除它。此属性导致接收器在调用时在不同/新进程上运行。但不同进程之间不支持 SharedPreferences。

      只要你没有在接收器中做大任务,那没有任何问题。

      【讨论】:

        【解决方案4】:

        可能是因为您使用的是getDefaultSharedPreferences,请尝试使用

        SharedPreferences prefs = getSharedPreferences("my_prefs", Context.MODE_PRIVATE);
        String yourString = prefs.getString("message", "Doesn't exist");
        

        【讨论】:

        • 它在 getSharedPreferences 上给我一个错误,说“MyCallReceiver 类型的方法 getSharedPreferences(String, int) 是未定义的”
        猜你喜欢
        • 1970-01-01
        • 2012-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-03
        • 1970-01-01
        相关资源
        最近更新 更多