数日前からアプリに大きな問題があります。私の英語があまりネイティブではない場合は、事前にお詫び申し上げます。AlarmManager を実装して、アプリのユーザーが現在または翌日のいつでも特定のサービスを開始できるようにしました。たとえば、ユーザーがサービスの時間を明日の午前 8 時に設定してから、サービスを開始するとします。
アラームマネージャーは、今から選択された時間まで計算された時間を待機し (時間も手動で計算しましたが、それは正しいです!)、サービスを開始します。私の問題は、アラームマネージャーがサービスを開始する場合と開始しない場合があることです。4時間以上待たなければならない場合、それ以上機能せず、サービスが呼び出されないようです。必要なすべての許可を設定しました。そうしないと、まったく機能しません。以下のアラームマネージャーのコードをご覧ください。
someIntent = new Intent();
someIntent.setAction("START_SERVICE");
AlarmManager alarams ;
alarmIntent = PendingIntent.getBroadcast(MainActivity.this, 0, someIntent, PendingIntent.FLAG_CANCEL_CURRENT);
alarams = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarams.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+delay, alarmIntent);
ブロードキャストレシーバーは次のように実装されています (そして登録されています!):
alarmReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Intent myIntent = new Intent(MainActivity.this, MyService.class);
startService(myIntent);
}
};
私が言ったように、それが機能していない場合、サービスを開始する前に停止します。
編集:アイデアがあります。私はこのスレッドで何かを読みました:アラームマネージャーと内部ブロードキャストレシーバーを備えたAndroidの長時間実行サービス
インテント「someIntent」のコンストラクターは、マニフェスト ファイルで宣言された BroadcastReceivers に対してのみ機能する可能性があります。したがって、私の場合は、someIntent = new Intent("START_SERVICE")
の代わりに使用する必要がありsomeIntent = new Intent(); someIntent.setAction("START_SERVICE")
ます。この効果はトンネリングと呼ばれます - 私はそれを理解します。言及されたスレッドでよく説明された回答をありがとう!他のアイデアや私と同じ経験があれば教えてください!エミュー