2016-02-28 91 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