Android My BroadcastReceiver Class没有收到通知发送的动作

时间:2016-03-09 15:20:58

标签: android broadcastreceiver intentservice

在我的IntentService类中,我创建了一个通知并分配了ID = 1213,一旦应用程序打开,通知就会显示出来。

    Intent cancelScan = new Intent();
    cancelScan.setAction(CANCEL);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1213, cancelScan, PendingIntent.FLAG_UPDATE_CURRENT);
    mNbuilder.addAction(android.R.drawable.ic_menu_close_clear_cancel,"Cancel Scanning",pendingIntent);

    NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
    manager.notify(NOTIFICATION_ID, mNbuilder.build());

在我的BroadcastReceiver类

if(CANCEL.equals(intent.getAction())){
        Log.i(TAG,"Received Broadcasr Receiver");
        NotificationManager nm = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
        //context.stopService(new Intent(context,ScanService.class));
        nm.cancel(NOTIFICATION_ID);
    }
}

和,我的Manifest.XML

 <receiver android:name=".WifiScanReceiver" android:enabled="true">
        <intent-filter>
            <action android:name="CANCEL"/>
        </intent-filter>
    </receiver>

当我点击通知下方的操作按钮时,我曾尝试过几次,但Logcat没有打印任何内容。哪些部分我做错了?提前谢谢。

1 个答案:

答案 0 :(得分:0)

您的清单中CANCEL的值和声明为操作的值(&#34; CANCEL&#34;)必须相等,否则它将无法正常工作。你没有,这就是你没有达到你的if语句的原因。但是,您的接收器已被触发,因为您使用正确的操作发送广播。

要确保在代码中使用正确的值,您可以在WifiScanReceiver中声明一个静态最终值:

public class WifiScanReceiver {
    public static final String CANCEL = "CANCEL";
    ...
}

因此,当您发送广播时,您也可以在代码中使用它:

Intent cancelScan = new Intent();
cancelScan.setAction(WifiScanReceiver.CANCEL);

通过这种方式,您始终可以确定使用相同的值。唯一一个你必须确定的也是正确的,就是你的清单中的那个。