2011-04-02 57 views
0

每次重啓設備時都嘗試重置SharedPreference。爲什麼我的ON_BOOT_COMPLETED廣播接收器不工作?

這裏是我的代碼:

MyReceiver.java

package ***************; 

    import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 

public class MyReceiver extends BroadcastReceiver { 
    SharedPreferences mPrefs; 

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

     mPrefs = context.getSharedPreferences("myAppPrefs", 0); 
     setStatus("***********"); 


    } 

    public void setStatus(String statustext) { 

     SharedPreferences.Editor edit = mPrefs.edit(); 
     edit.putString("status", statustext); 
     edit.commit(); 
     } 

} 

Android清單

 <?xml version="1.0" encoding="utf-8"?> 
     <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
       android:versionCode="1" package="*********" android:versionName="1.8.3"> 
        <application android:icon="@drawable/icon" android:label="@string/app_name"> 
       <activity android:name=".Main" 
          android:label="@string/app_name" 
          android:configChanges="keyboardHidden|orientation"         
    android:screenOrientation="portrait"> 
         <intent-filter> 
         <action android:name="android.intent.action.MAIN" /> 
         <category android:name="android.intent.category.LAUNCHER" /> 
        </intent-filter> 
       </activity> 

       <activity android:name="help"></activity> 
    <activity android:name="MyReceiver"></activity> 
    <receiver android:name=".MyReceiver"> 

       <intent-filter> 
         <action android:name="android.intent.action.BOOT_COMPLETE"/> 
         <category android:name="android.intent.category.DEFAULT" /> 
       </intent-filter> 
    </receiver> 
</application> 
    <uses-sdk android:minSdkVersion="4" /> 


<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission> 

<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> 

</manifest> 

的SharedPreferences是我的主要活動設置。我的目標是獲得ON_BOOT_COMPLETED廣播來觸發MyReceiver活動,該活動會重置特定的SharedPreference,但是,當我嘗試此操作時,SharedPref未被重置。

我在做什麼錯? (我同時包含@Commonware和@ Blundell的修復程序,但它仍然不起作用)

+0

您可以擺脫MyReceiver的標籤,因爲我認爲它仍然未被使用 – Blundell 2011-04-02 17:41:39

回答

1

您不檢索您的共享首選項。

SharedPreferences mPrefs; 
SharedPreferences.Editor edit = mPrefs.edit(); 

什麼都不做。你需要:

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

    mPrefs = context.getSharedPreferences(); // or if your not using the default getSharedPreferences (String name, int mode) 
    setStatus("****************"); 


} 
+0

確切地說......它實際上應該會與NPE一起崩潰。好趕上:) – Cristian 2011-04-02 16:19:09

+0

感謝您的幫助,不幸的是,我實施了這些變化,它仍然無法正常工作。我會更新我原來的帖子。 – 2011-04-02 16:39:20

1

你有<receiver>元素<application>元素,將被忽略的外面。

+0

感謝您的幫助,我現在感覺非常愚蠢! – 2011-04-02 17:32:53

+0

剛剛測試過它...仍然無法正常工作。我將更新我原來的帖子並修改。 – 2011-04-02 17:34:39

+0

自己完成同樣的事情:-):http://stackoverflow.com/questions/3439356/unable-to-start-service-intent/5439157#5439157 – Blundell 2011-04-02 17:34:52