状态通知与Android服务通话

时间:2014-03-06 15:21:19

标签: android android-intent service notifications android-pendingintent

我有一个Android Service,可以创建通知和相应的状态图标。当用户对通知作出反应时,我希望将意图传递给我的Service。这一切似乎都很简单。

我可以创建通知,状态栏中会出现图标,当我拉下窗帘时,我会看到我的通知。当我点击通知时,没有任何反应。当我什么都不说时,我的意思是意图没有传递给我的服务。

我感觉到的是我在Notification,Intent或PendingIntent中错误地设置了某些内容,但我正在努力弄清楚哪一个是错误的。

这是代码(所有在Service类中):

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.d(TAG, "onStartCommand(): intent=" + intent + ", startId=" + startId);
    Log.d(TAG, LKServiceMessages.dumpExtras(intent));

    String command = LKServiceMessages.getMessageKind(intent);


    if (command.equals(K_STATUS_NOTIFICATION)) {
        cancelNotification(0);
        command = null;
    } else {
        displayStatusNotification();
    }

    if (command == null) {
        Log.d(TAG, "Non-library command received - ignoring...");
    } else {
        Log.d(TAG, "Handling action - partially processing this action");
    }

    return START_REDELIVER_INTENT;
}

private void displayStatusNotification() {
    Intent intent = new Intent(K_STATUS_NOTIFICATION,null,this,LKService.class);

    PendingIntent pIntent = PendingIntent.getService(LKService.this, 0, intent, 0);

    mNotification = new NotificationCompat.Builder(this)
        .setContentTitle("Bacon")
        .setContentText("Bacon is good for you. Tap to dismiss.")
        .setSmallIcon(R.drawable.ic_status)

        .addAction(R.drawable.ic_status, "Notification getAction()", pIntent)

        .setAutoCancel(true)
        .setDeleteIntent(pIntent)

        .build();

    NotificationManager notificationManager =
            (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    notificationManager.notify(0, mLeafNotification);
}

private void cancelNotification(int notificationId) {
    if (Context.NOTIFICATION_SERVICE != null) {
        String ns = Context.NOTIFICATION_SERVICE;
        NotificationManager nMgr = (NotificationManager) getApplicationContext().getSystemService(ns);
        nMgr.cancel(notificationId);
    }
}

我做错了什么,但我无法弄清楚是什么。我最初的想法是PendingIntent是错误的,但这里有许多我不完全理解的活动部分。

有什么想法?

1 个答案:

答案 0 :(得分:1)

在构建通知时,您正在调用

.setDeleteIntent(pIntent)

这将设置用户删除通知时将使用的Intent。听起来你想打电话

.setContentIntent(pIntent)

代替。这将设置用户点击通知时将使用的Intent