2016-09-05 17 views
1

ユーザが選択した時点でアクティビティを開くアラームがあります。ユーザーがスタートボタンを押すと、アラームはうまくいっていますが、再起動後にキャンセルされます。私はどこにでも見てきました。そして、私はサービスを利用すべきだと言います。サービスを使用せずに再起動後にアラームをオンにすることは可能ですか?私はコーディングに新しいので、あなたがしなければならないことを崩壊してください。あなた再起動時にAlarmManagerがリセットされる

public class MainActivity extends AppCompatActivity { 

Button disable; 
Button start; 
TimePicker timePicker; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    timePicker = (TimePicker) findViewById(R.id.timePicker); 
    disable = (Button) findViewById(R.id.disable_alarm); 
    start = (Button) findViewById(R.id.button); 


    start.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 
      Calendar calendar = Calendar.getInstance(); 
       calendar.set(Calendar.HOUR_OF_DAY, timePicker.getHour()); 
       calendar.set(Calendar.MINUTE, timePicker.getMinute()); 

       Intent intent = new Intent(getApplicationContext(),notification.class); 

       PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 100, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
       AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
       alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 120*1000, pendingIntent); 

     } 
    }); 

    disable.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(getApplicationContext(),notification.class); 
      PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 100, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
      AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
      alarmManager.cancel(pendingIntent); 
     } 
    }); 

に感謝し、ブロードキャストレシーバは、電話がシャットダウンされた後にキャンセルされ

public class notification extends BroadcastReceiver { 



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

    Intent scheduledIntent = new Intent(context, pop_up2.class); 
    scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(scheduledIntent);}} 

おかげ

+0

システムが起動し、そこから 'AlarmManager'イベントをリセットする必要があるときに、' BroadcastReceiver'が必要です。 – Shaishav

+0

リセットされた場合、ユーザーはアラームを消すかどうかに関係なく、アラームはオフになります。私は、ユーザーがそれを望んでいる場合、アラームが欲しいだけです。 – DroidGalaxy

+0

ええ、私は通常、「SharedPreference」に自分のアラームを保存し、消えたらすぐにそこから削除します。したがって、あなたの 'レシーバー'では、あなたの好みにあるすべてのアラームをスケジュールするだけです。もちろんこれはあなたのユースケースに依存します。 – Shaishav

答えて

1

アクティブなアラームのすべてです。アラームをリセットするには、別のブロードキャストレシーバーを使用する必要があります。この場合、起動完了アクションのみが受信されます。その後、受信機はサービスを起動し、すべてのアラームをバックグラウンドでリセットします。仕事が終わったときに終了するので、あなたのためのベストはIntentServiceです。もちろん、リセットするアラームを覚えておくために、アラームに関する情報をどこかに保存する必要があります。たとえば、SQLiteを使用して格納することができます。マニフェストで

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

<receiver android:name="developer.marat.apps.days.Alarms.BootCompletedReceiver" 
    android:enabled="true"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 

<service android:name="developer.marat.apps.days.Alarms.RestartAlarmsService"/> 

特別レシーバ:

public class BootCompletedReceiver extends BroadcastReceiver{ 

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

     if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) { 
      Intent i = new Intent(context, RestartAlarmsService.class); 
      ComponentName service = context.startService(i); 
     } 
    } 
} 

RestartAlarms:

public class RestartAlarmsService extends IntentService{ 

    public RestartAlarmsService() { 
     super("RestartAlarmsService"); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 

     // Restart your alarms here. 
     // open database, iterate through every alarm and set them again 

    } 
} 
+0

アラームを要求するユーザーに関係なくサービスが開始されますか? – DroidGalaxy

+0

再起動後にサービスが開始されるのは1回だけです。それはそれ自身で動作します。サービスがdbから登録されたすべてのアラームをチェックするようにコードを記述する必要があります。アクティブなアラームのみを保存する必要があります。ユーザが特定のアラームをキャンセルした場合は、dbから削除するか、それを非アクティブとしてマークする必要があります。したがって、サービスは必要なアラームのみをリセットします。 – Marat

+0

コーディングが新しくなりました。私はそれをどうやって行うのか分かりません。申し訳ありません – DroidGalaxy

関連する問題