2016-02-28 86 views
1

我已经遍布各地搜索,但我仍然无法完成这项工作。即使在服务上,它也可以在任何地方工作,但不在Receiver上......有人可以帮助我吗?Android SharedPreferences接收器不工作

SAVE(MainActivity):

SharedPreferences blockerPreferences = getSharedPreferences("XXX", Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = blockerPreferences.edit(); 
(...) 
editor.putBoolean("serviceActivated", true).commit(); 

了RETRIEVE(需要修复):

public class CallReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     //ENABLE OR DISABLE SERVICE 
     SharedPreferences blockerPreferences = context.getSharedPreferences("XXX", Context.MODE_PRIVATE); 
     boolean Activate = blockerPreferences.getBoolean("serviceActivated", false); 

     if (Activate || intent.getBooleanExtra("activateService", true)) { 
      context.startService(new Intent(context, CallReceiverService.class)); 
     } else { 
      context.stopService(new Intent(context, CallReceiverService.class)); 
     } 

    } 
} 

注意,它的工作在我的活动和服务也一样,它不仅在工作接收器。

谢谢!

+0

不是你的'服务'运行在不同的过程?在多进程模式下访问共享首选项存在很多问题(请参阅更多http://stackoverflow.com/questions/27827678/use-sharedpreferences-on-multi-process-mode),因此这可能是您的问题。 – skywall

+0

嗨@skywall,该接收器由重复闹铃或开机启动。我总是使用相同的应用程序和过程。我不能简单地访问它,总是检索'false',我需要它,因为在启动时它将激活服务,如果'激活'是真的。 – FilipeOS

+0

你能提供你设置'serviceActivated'(分别为'activateService')为真的代码的一部分吗? – skywall

回答

-1

我不知道如果我理解你的问题很好如果没有,对不起 ...但是这个代码

编辑/套

SharedPreferences sp = getSharedPreferences("key", 0); 
SharedPreferences.Editor sedt = sp.edit(); 
sedt.putString("key", "value"); 
sedt.commit(); 

保存

SharedPreferences sp = getSharedPreferences("key", 0); 
String tValue = sp.getString("textvalue",""); 
String tOperative = sp.getString("txtopertaive",""); 
+0

你好,我想读不写。这段代码不起作用。总是收到假值 – FilipeOS

+0

,让我们看看你写入共享偏好值的部分 – Lemao1981

+0

@ Lemao1981新增 – FilipeOS