我的问题是这样的:我有一个创建通知的服务;如果选择了通知中的某个操作,我希望服务中的某个特定功能可以运行。
到目前为止,我有以下代码将“停止”操作添加到我的通知中:
// Stop action intent.
Intent stopIntent = new Intent(this, LockService.class);
stopIntent.setAction(STOP_ACTION); // Stop action
PendingIntent stopPendingIntent = PendingIntent.getBroadcast(
this, 0, stopIntent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.addAction(android.R.drawable.ic_menu_mylocation,
"Stop", stopPendingIntent);
我也准备好了广播接收器!它存储在本地,但是......
BroadcastReceiver stopReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "Received an intent!!! " + intent.getAction());
}
};
我的日志告诉我,这是在我的服务创建时运行的,因此接收者应该在服务中处于活动状态...
IntentFilter stopFilter = new IntentFilter();
stopFilter.addAction(STOP_ACTION);
this.registerReceiver(stopReceiver, stopFilter);
Log.i(TAG, "Receiver stopReceiver registered.");
serviceRegistered = true;
不幸的是,永远不会调用stopReceiver的onReceive。
答案 0 :(得分:0)
我的意图太具体了 - 我从这个过于具体的请求中改变了它......
Intent stopIntent = new Intent(this, LockService.class);
代替此代码。
Intent stopIntent = new Intent();
显然,指定一个类和一个上下文不是广告意图的方式!