2011-11-09 40 views
0

我是android的新手。我正在開發android中的鬧鐘應用程序。我已經完成了以下代碼,這些代碼在設備啓動時會起作用,但在設備重新啓動時它不起作用。我將該警報存儲在共享首選項中並從中檢索。當設備重新啓動時,我重新安排來自OnBootReceiver的報警。我已經提到了Android清單的權限。爲了測試目的,我採用了硬編碼的值。請檢查以下代碼,並幫助我從一天半的時間裏對它進行研究。任何人都有想法。謝謝。在設備重新啓動警報不會在特定時間關閉

公共類FirstActivity延伸活動實現OnClickListener {

int mHour = 14; 
    int mMinute = 48; 
    static String prefkey="SHARED_KEY"; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    SharedPreferences preferences =getSharedPreferences(prefkey,Context.MODE_WORLD_READABLE); 


     SharedPreferences.Editor editor = preferences.edit(); 
     editor.putInt("min",mMinute); 
     editor.putInt("hour",mHour); 
     editor.commit(); 
    } 
} 

OnBootReciever延伸的BroadcastReceiver公共類{

int sethour,setmin; 
@Override 
public void onReceive(Context context, Intent intent) { 

    Toast.makeText(context, "booting....", Toast.LENGTH_LONG).show(); 
    SharedPreferences preferences=context.getSharedPreferences(FirstActivity.prefkey,Context.MODE_PRIVATE); 
    sethour=preferences.getInt("hour",14); 
    setmin=preferences.getInt("min",48); 
    Calendar cal=Calendar.getInstance(); 
    cal.add(Calendar.MINUTE,setmin); 
    cal.add(Calendar.HOUR_OF_DAY,sethour); 
    cal.add(Calendar.SECOND,0); 


    AlarmManager mgr=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
    Intent i=new Intent(context,RepeatingAlarm.class); 

    PendingIntent sender1 = PendingIntent.getBroadcast(context,0, i,PendingIntent.FLAG_UPDATE_CURRENT); 

    mgr.setRepeating(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(),AlarmManager.INTERVAL_FIFTEEN_MINUTES,sender1); 

} 

}

公共類RepeatingAlarm延伸Broadc astReceiver {

static MediaPlayer mMediaPlayer ; 

@Override 
public void onReceive(Context context, Intent intent) { 
    Toast.makeText(context, "Trigger the alarm", Toast.LENGTH_LONG).show(); 
    mMediaPlayer = new MediaPlayer(); 
    mMediaPlayer.create(getcontext,R.raw.warm).start(); 
    } 

}

的AndroidManifest.xml - >

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 
<receiver android:name="com.vidushi.alarmsystem.RepeatingAlarm"></receiver> 
     <receiver android:name=".OnBootReciever" android:process=":remote"> 
      <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <category android:name="android.intent.category.HOME" /> 
      </intent-filter> 
     </receiver> 
+0

有你在menifest文件添加權限<使用許可權的android:NAME = 「android.permission.RECEIVE_BOOT_COMPLETED」/> – Maneesh

+0

感謝reply.Yes我已經做了,對不起,我忘了提及它,並在設備上重新啓動敬酒味精引導...也即將到來。 –

+0

沒有啓動接收器,代碼是否工作?例如。按鈕單擊設置警報。 –

回答

1

當Android把你的OnBootReceiver類,它通過它自己的範圍內,而不是從上下文中可能是你的應用。所以它找不到共享首選項,因爲android沒有它們。嘗試使用自己的上下文,而不是使用onReceive方法獲取的上下文。您可以創建類似contextApplication類,並在應用程序啓動時初始化它:

import android.content.Context;

public class Application extends android.app.Application { 

    private static Context context; 

    public void onCreate(){ 
     context=getApplicationContext(); 
    } 

    public static Context getContext() { 
     return context; 
    } 

} 

您還需要添加以下屬性在AndroidManifest.xml標記:

android:name=".Application" 

Link

然後用Application得到共享偏好:

Context context = Application.getContext(); 
SharedPreferences preferences=context.getSharedPreferences(FirstActivity.prefkey,Context.MODE_PRIVATE); 
+0

感謝您的回覆,但我已經設法得到上下文現在我面臨的問題警報不會在重新啓動後關閉我認爲在待定意圖問題請檢查它。 –

相關問題