4

アクティビティ A があり、AlarmManager を登録して別の BroadcastReceiver B をトリガーします。時間になると、B の onReceive() が呼び出され、別のアクティビティ C が開始されます。C が開始されると、A が閉じられる場合があります。

私の問題は: - C は A の pendingIntent を知りません。C で alarmManager.cancel(pendingIntent) を呼び出すにはどうすればよいですか? - または、A から B、C に pendingIntent を渡すにはどうすればよいですか?

助けてください。

4

4 に答える 4

2

私のアプリケーションでは、 にPendingIntent必要なを返す静的メソッドを作成しAlarmManager、任意のクラスから呼び出すことができます。PendingIntent時間の間で変化しないがある場合、これはあなたのために働くことができます。たとえば、私は持っています:

public static PendingIntent getSyncPendingIntent(Context context)
    {
        Intent i = new Intent(context, <classname>.class);
        PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
        return pi;  
    }

そして、それを任意のクラスから呼び出すだけで、同じPendingIntent.

于 2011-05-09T14:57:22.070 に答える
0

生成したすべてのサービスをキャンセル/破棄するには、通常、これらのサービスを開始するために使用したものと同じ「pendingInetent」および「AlarmManager」変数が必要です。たとえば、前の変数が am_mngr および pndngInt の場合、次のように使用します。 stopservice メソッドで。

 am_mngr.cancel(pndngInt); // this will cancel the previous servicse...
于 2012-12-18T03:17:12.690 に答える
0

シングルトン サービスで Alarm とそのインテントを管理する方が、アクティビティからアクティビティに渡そうとするよりもはるかに簡単であり、脆弱性もはるかに少なくなります (インテントをさらにデイジー チェーンすることなく、途中のどこかにアクティビティ D を導入できます)。 .

于 2011-05-09T14:50:42.940 に答える
0

A にブロードキャスト レシーバーを登録して、C の起動時にブロードキャストされるカスタム アクションをリッスンできます。

アクティビティ A で

private BroadcastReceiver onActivityCStartedReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        //cancel the pendingIntent for the alarm here
    }
};

受信者を登録する

registerReceiver(onActivityCStartedReceiver , new IntentFilter(ACTIVITY_C_STARTED_ACTION));

アクティビティ C 呼び出しで

Intent i = new Intent(ACTIVITY_C_STARTED_ACTION);
context.sendBroadcast(i);

それを試してみてください!あなたの利益のためにメッセージングシステムを利用してください:D

于 2011-05-09T15:02:23.243 に答える