32

ハマった。アプリケーションの起動時に、以前に設定したアラームが有効かどうかを確認したいと考えています。そうでない場合は、設定したいと思います。

この解決策を参考にしました。私は次のように意図を一致させようとしています:

Intent intent = new Intent();
        intent.setAction("com.vit.upload");
        PendingIntent pIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_NO_CREATE);

しかし、うまくいきません。他に何が機能しますか?

4

4 に答える 4

80

まず、以前に作成したアラームにアクセスする方法についての簡単なチュートリアル:

次のような一意の ID を使用してそれぞれを作成することにより、アラームを区別できます。

Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getActivity(this,UNIQUE_ID_GOES_HERE, intent, 0);
AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, triggerAtMillis ,pi);

このアラームにアクセスするには、同じ一意の ID を持つ同じ PendingIntent を作成する必要があります。たとえば、次の例では、PendingIntent id 1234 で作成したアラームにのみアクセスします。その後、前のアラームをキャンセルしてリセットします。

Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 1234, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, triggerAtMillis ,pi);

考え方は単純です。ID を追跡し、それらを使用してそれぞれのアラームにアクセスします。同じ ID で複数のアラームを作成すると、最新のアラームが前のアラームをキャンセルします。

アプリケーションを起動するたびにアラームがアクティブかどうかを確認する代わりに、アクティビティのonCreate()メソッドでアラームを再設定するだけで、主な問題になります。上で説明したのと同じ PendingIntent を使用します。これにより、アラームが以前に設定されているかどうかを確認する手間が省けます。目的はアラームを有効にしておくことなので、アプリケーションを起動するたびに以前に設定したアラームを上書きしても問題ありません。PendingIntent の作成には必ず同じ ID を使用してください。

過去の時間にアラームを設定しようとするとすぐにアラームがトリガーされるのを避けるために、アラームの時間がすでに経過しているかどうかを確認することを忘れないでください。

別のケースを考えてみましょう: デバイスの電源を切ると、すべてのアラームがキャンセルされます。これにより、再起動時に再度設定する以外に選択肢はありません。これを行うには、BroadcastReceiverを使用する必要があります。

この回答は、その方法について役立ちます。上で提案したように、BroadcastReceiver の onReceive() メソッドでアラームを再作成するだけです。

于 2012-07-14T04:51:44.333 に答える
5
  • Android デバイスを再起動すると、最初のアラームは機能しません。
  • ブール共有設定を使用して、アラームが作成されたかどうかを確認できます。
  • Android の保留中の意図は一意の ID を使用します

    int REQUEST_CODE=2344; // Unique ID  
    PendingIntent pIntent = PendingIntent.getBroadcast(context, REQUEST_CODE, intent, PendingIntent.FLAG_NO_CREATE);

システムの再起動時に Boot Receiver ブロードキャストを使用し、同じリクエスト コードで再度アラームを作成する必要があります。REQUEST_CODE=2344;

于 2012-06-07T10:54:52.393 に答える
4

基本的に私の経験から、同じインテントとFLAG_UPDATE_CURRENTを使用する場合、同じインテントに対して 2 つのアラームが設定されていないことを確認できます。また、get 関数で使用されるFLAG_NO_CREATEを詳しく見ることができ、記述された意図を持つ保留中の意図が既に存在する場合は null を返します。

また、保留中のインテントは区別できるため、同じリクエスト ID を使用することを忘れないでください。

于 2012-07-10T10:11:34.320 に答える
1

ここの情報に基づくと、アラームが存在するかどうかを直接確認するために電話をかけることはできないようですが、いくつかの回避策が提供されています。

于 2012-07-11T02:10:06.943 に答える