2

数日前からアプリに大きな問題があります。私の英語があまりネイティブではない場合は、事前にお詫び申し上げます。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")ます。この効果はトンネリングと呼ばれます - 私はそれを理解します。言及されたスレッドでよく説明された回答をありがとう!他のアイデアや私と同じ経験があれば教えてください!エミュー

4

1 に答える 1

0

デバイスをシャットダウンして起動すると、アラーム マネージャーのブロードキャスト レシーバーを取得できません。完了した OnBoot を受信する OnBootReceiver を実装すると、起動されなかった保留​​中のアラームを開始できます。

于 2012-05-10T10:04:28.040 に答える