2011-11-09 20 views
0

私はアンドロイドには初心者です。私はアンドロイドでアラームアプリケーションを開発しています。私はデバイスがオンになっているときに動作するコードを次のようにしていますが、デバイスを再起動しても機能しません。私は共有の設定でそのアラームを保存し、それから取得しました。デバイスの再起動時に、のOnBootReceiverからアラームを再スケジュールします。私はすでにAndroidマニフェストへのアクセス許可を述べました。テスト目的のために、私はハードコードされた値を取っています。以下のコードをチェックし、1日半からそれについて研究してください。誰でも知っている。ありがとう。デバイス再起動時に特定の時刻にアラームがオフにならない

パブリッククラスFirstActivityアクティビティがOnClickListener実装延び{BroadcastReceiver延びOnBootReciever

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(); 
    } 
} 

パブリッククラス{

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を拡張します {

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(); 
    } 

}

astReceiverの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.permission.RECEIVE_BOOT_COMPLETED」/> reply.Yesため – Maneesh

+0

おかげで、私はすでにそれを行っています、申し訳ありませんが、私はそれを言及することを忘れて、デバイスの再起動でToast MSG Booting ...も来ています。 –

+0

ブートレシーバーなしでコードは機能しますか?例えば。ボタンをクリックするとアラームが設定されます。 –

答えて

1

AndroidはあなたのOnBootReceiverクラスを呼び出すとき、それは自分のコンテキストからではない状況だ渡すかもしれませあなた応用。アンドロイドはそれらを持っていないので、それは共有の設定を見つけることができません。 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

返信ありがとうございますが、私はすでにコンテキストを取得できています。私は問題が発生したときに警告を発しています。再起動後には警告が出ません。 –

0

ですあなたのアプリは、SDカードにインストールされて?そうであれば、 'boot completed'通知を受け取ることはありません。

App Install Location

関連する問題