0

私は通知を行います。ユーザーが通知をクリックしてクリアすると、保留中のブロードキャストが実行されます。 「setDeleteIntent」と呼ばれるメソッドがあります。このメソッドのドキュメンテーションによると、ユーザが受信通知をクリアすると、保留中のBraodCast Receiverが開始されます。保留中BroadCastReceiverはsetDeleteIntnetを使用して開始しません

私は以下のコードで示すようにBroadcast Receiverクラスを作成し、 'setDeleteIntent'メソッド保留中のブロードキャストで。 実行時に、受信した通知がクリアされると、BroadcastReceiverの 'onReceive'のログメッセージがコンソールに表示されませんでした。

下記のコードを見て、emacにbroadcastReceiverの 'onReceive'が実行されない理由をお知らせください。

:BroadCasrReceiverは、コードに示すように 'LocalBroadCastReceiver'を使用して登録されました。

コード

String title = getString(R.string.app_name); 
    NotificationCompat.Builder builder = new NotificationCompat.Builder(this).setSmallIcon(R.drawable.ic_launcher); 
    builder.setStyle(new NotificationCompat.BigTextStyle().bigText(msg)).setContentText(msg).setContentTitle(title); 
    builder.setContentIntent(contentIntent).setAutoCancel(true); 

    //builder.setWhen(Long.valueOf(eu.man.m24wsapp.utils.gcm.TimeUtils.getNowTS()) + 5000); 
    builder.setLights(Color.argb(1, 0, 0, 255), 1000, 400); 
    builder.setOngoing(false); 
    builder.setAutoCancel(true); 


    builder.setDeleteIntent(getPendingBroadCast()); 
    ((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).notify(NOTIFICATION_ID, builder.build()); 
    .... 
    .... 
    .... 

    //getPendingBroadCast method 
    private PendingIntent getPendingBroadCast() { 
    LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(new BCRDismissNotification(), 
      new IntentFilter(BCRDismissNotification.ACTION_DISMISSED_NOTIFICATION)); 

    Intent intent = new Intent(this, BCRDismissNotification.class); 
    //intent.setAction(BCRDismissNotification.ACTION_DISMISSED_NOTIFICATION); 
    return PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); 
} 

ブロードキャストレシーバー

public class BCRDismissNotification extends BroadcastReceiver { 
private final static String TAG = BCRDismissNotification.class.getSimpleName(); 
public final static String ACTION_DISMISSED_NOTIFICATION = "action_dismissed_notification"; 

@Override 
public void onReceive(Context context, Intent intent) { 

    Log.i(TAG, "********************* BCR  **************"); 
} 

}

答えて

1

あなたはかなりあなた自身の質問に答えています。これはLocalBroadcastManagerで動作しません!

LocalBroadcastManagerを使用して受信者を登録すると、アプリケーションによってブロードキャストされたブロードキャストIntentだけが聴取されます。あなたの場合、ブロードキャストIntentは、アプリケーションの一部ではないAndroidの通知フレームワークによって送信されます。この場合、登録された受信者はトリガーされません。

グローバルブロードキャスト用に受信機を登録する必要があります。受信者のインスタンスを作成し、ContextアプリケーションにregisterReceiver()を呼び出すか、受信者を<receiver>タグ付きでマニフェストに追加して、設定することができます。android:exported="true"

関連する問題