2

Broadcastreceiver に設定したアラームを削除したい。これが実行方法です:

user_state フィールドを含む GCM メッセージを受け取りました。

user_state が 0 の場合、通知はトリガーされません
user_state が 1 の場合、通知がトリガーされます
user_state が 2 の場合、アラームが設定され、通知は 20 分後にトリガーされます。

これはすべてうまくいきます。

ここで、GCM インテントから受信したデータに応じて、特定のアラームを削除したいと考えています。残念ながら、AlarmManager.cancel() は Extra フィールドを比較しません。また、intent.setType("比較するデータ") を使用しようとしましたが、このフィールドを設定するとブロードキャストが受信されません...

Action フィールドで比較する必要がある Data を使用して、新しい BroadcastReceiver を登録しようとしました。私が理解しているように、これは正常に機能するはずですが、BroadcastReceiver 内から BroadcastReceiver を登録することはできません。

また、AlarmManager から Pendingintents のリストを取得することはできません。今できることは、すべてのアラームを削除することだけです。これはオプションではありません。

私が持っている他の唯一のアイデアは、AlarmManagerの代わりに独自のサービスを使用することです...私はそれを避けたいと思います。ビルトインオプションがある場合、余分なリソースを使用したくありません。

これが私の設定したアラーム方法です:

private void setTimed(Intent intent, Notify notify) {
    Bundle bundle = intent.getExtras();
    bundle.remove("userstate");
    bundle.putString("userstate", "3");

    Intent ringintent = new Intent("de.pluetzner.waveobserver.TRECEIVE");
    ringintent.setType(notify.getHost()+"&&&"+notify.getService());
    ringintent.putExtras(bundle);
    AlarmManager am = (AlarmManager) this.context.getSystemService(this.context.ALARM_SERVICE);
    PendingIntent pi = PendingIntent.getBroadcast(this.context, 0, ringintent, 0);
    am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (this.waittime * 60 * 1000), pi);
    Log.d("timer", "time set");
}

ringintent.setType() はアラームの識別子である必要がありますが、機能しません。これがないと、アラームが受信されます

これはアラームを削除する方法です。

private void deleteAlarm(Intent intent, Notify notify) {
    Intent ringintent = new Intent("de.pluetzner.waveobserver.TRECEIVE");
    ringintent.setType(notify.getHost() + "&&&" + notify.getService());
    PendingIntent pi = PendingIntent.getBroadcast(this.context, 0, ringintent, 0);
    AlarmManager am = (AlarmManager) this.context.getSystemService(this.context.ALARM_SERVICE);
    am.cancel(pi);
    Log.d("timer", "time removed");
}

ここでも同じです - setType が設定されていると機能しません。それがないと、すべてのアラームが削除されます。

私はまた、それがsetTypeのどういうわけか乱用になることも知っていますが、私はアイデアがありません。あなたがいずれかを持っている?

4

1 に答える 1