在我的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没有打印任何内容。哪些部分我做错了?提前谢谢。
答案 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);
通过这种方式,您始终可以确定使用相同的值。唯一一个你必须确定的也是正确的,就是你的清单中的那个。