0

でアンドロイドに私はBroadcastReceiverAlaramManagerを使用して、指定した時刻にアラームを設定し、(日中)指定した時刻に通知を実装します。はどのようにAlaramMangerとBroadCastReceiver

指定された時間を警告しました。私はアプリを実行した後、それは私が設定した時間ではないにもかかわらず、再びアラーム。

つまり、アラームを午後9時21分に設定し、午後9時21分以降にアプリを実行すると、通知が生成されます。

設定した特定の時刻にアラーム通知を行い、アプリが実行されないようにしたいだけです。 また、私はアプリを実行すると、それはアラームしません。

どうすれば修正できますか?

これは私BroadcastReceiverコードです -

public class BroadcastD extends BroadcastReceiver{ 
    Context context; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     this.context = context; 

     showNotification(); 

} 

    public void showNotification() { 
     NotificationManager notificationManager = 
       (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
     PendingIntent pendingIntent = PendingIntent 
      .getActivity(context, 0, new Intent(context, MainActivity.class), 
        PendingIntent.FLAG_UPDATE_CURRENT); 

     NotificationCompat.Builder builder = new NotificationCompat.Builder(context); 
     builder.setSmallIcon(android.R.drawable.ic_dialog_alert) 
      .setTicker("Ticket") 
      .setContentTitle("Title") 
      .setContentText("Context") 
      .setWhen(System.currentTimeMillis()) 
      .setAutoCancel(true) 
      .setContentIntent(pendingIntent); 

     notificationManager.notify(1, builder.build()); 
    } 
} 

これは私のMainActivityコードです:

public class MainActivity extends AppCompatActivity { 
    AlarmManager am ; 

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

     am = (AlarmManager) getSystemService(ALARM_SERVICE); 

     AlarmHATT alarmHATT = new AlarmHATT(getApplicationContext()); 
     alarmHATT.Alarm(); 
} 
public class AlarmHATT { 
    private Context context; 

    public AlarmHATT(Context context) { 
     this.context = context; 
    } 

    public void Alarm() { 
     Intent intent = new Intent(context.getApplicationContext(), BroadcastD.class); 
     PendingIntent sender = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0); 

     Calendar calendar = Calendar.getInstance(); 

     calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), 
       calendar.get(Calendar.DATE), 21, 21, 0); 

     am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 24*60*60*1000, sender); 
    } 
} 
+0

これは、過去の時刻を設定するとalarmManagerが起動する通常の動作です。正しい時間を設定するだけでは避けることはできません。 – Opiatefuchs

+0

私はアラームを避けることができる他の方法は何ですか?あなたが知っているなら、教えてください。ありがとうございました。 –

+0

ちょうど過去の時間を設定していません。問題は、なぜあなたは過去から時間を設定したいのですか?これは理にかなっていません。通過したイベントの通知を受ける必要はありません。 – Opiatefuchs

答えて

-2

は、指定した時間にset alarmへのコードの下に試してみてください。

am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); 
+0

私はすでにそれを試みました。しかし、それはまたそれを好きです。 –

1

、すぐに警報火災を避けるこのようなCalendarを使用して開始時刻を設定するには:

Calendar calendar = Calendar.getInstance(); 
calendar.setTimeInMillis(System.currentTimeMillis()); 

calendar.set(Calendar.HOUR_OF_DAY, 9); 
calendar.set(Calendar.MINUTE, 30); 
calendar.set(Calendar.SECOND, 0); 

そして、あなたが設定されている時間はすでに今日経過している場合、その後、あなたは設定する必要がありますカレンダーを翌日に設定することができます。

calendar.add(Calendar.DATE, 1); 

これは、すでにその日の前に経過した時刻に設定されているため、すぐにアラームが発生するのを防ぎます。

その後、起動時間としてcalendar.getTimeInMillis()を引き続き使用してください。

関連する問題