如何在Android服务中收到意图?

时间:2014-01-19 06:54:01

标签: android service notifications android-service android-notifications

我的问题是这样的:我有一个创建通知的服务;如果选择了通知中的某个操作,我希望服务中的某个特定功能可以运行。

到目前为止,我有以下代码将“停止”操作添加到我的通知中:

// 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。

1 个答案:

答案 0 :(得分:0)

我的意图太具体了 - 我从这个过于具体的请求中改变了它......

Intent stopIntent = new  Intent(this, LockService.class);

代替此代码。

Intent stopIntent = new Intent();

显然,指定一个类和一个上下文不是广告意图的方式!