将带有三个按钮的通知中的附加内容传递给服务

时间:2014-09-02 11:31:41

标签: android notifications

我正在尝试制作音乐播放器应用。在通知中我需要三个按钮。我正在发送附加信息,意图通知。但不知怎的,他们永远不会到达 这是我的代码 我想我需要以某种方式丢弃以前的额外内容或者更改挂起意图中的标记不太确定。

   void showNotificationForeground() {

    Intent i = new Intent(getApplicationContext(), PlayerService.class);
    i.putExtra("name", name);
    i.putExtra("songname", songname);
    i.putExtra("isservice", true);

    PendingIntent pi = PendingIntent.getService(getApplicationContext(), 0,
            i, 0);
    Intent ipause = new Intent(getApplicationContext(), PlayerService.class);
    ipause.putExtra("name", name);
    ipause.putExtra("songname", songname);
    ipause.putExtra("isservice", true);
    ipause.putExtra("action", "pause");
    PendingIntent pipause = PendingIntent.getService(
            getApplicationContext(), 0, ipause, 0);
    Intent iplay = new Intent(getApplicationContext(), PlayerService.class);
    iplay.putExtra("name", name);
    iplay.putExtra("songname", songname);
    iplay.putExtra("isservice", true);
    iplay.putExtra("action", "pause");
    PendingIntent piplay = PendingIntent.getService(
            getApplicationContext(), 0, iplay, 0);
    Intent istop = new Intent(getApplicationContext(), PlayerService.class);
    istop.putExtra("name", name);
    istop.putExtra("songname", songname);
    istop.putExtra("isservice", true);
    istop.putExtra("action", "pause");
    PendingIntent pistop = PendingIntent.getService(
            getApplicationContext(), 0, istop, 0);
    //
    Notification noti = new Notification.Builder(this)
            .setContentTitle("RajPlayer")
            .setContentText("Playing: " + songname)
            .setSmallIcon(R.drawable.ic_launcher).setContentIntent(pi)
            .addAction(R.drawable.play96, "Play", piplay)
            .addAction(R.drawable.pause96, "Pause", pipause)
            .addAction(R.drawable.cancel24, "Stop", pistop).build();
    //
    startForeground(NOTIFICATION_ID, noti);
}

1 个答案:

答案 0 :(得分:1)

意图之间的比较不会考虑额外因素,因为您可以看到here

所以可能发生的事情是,一旦第一个pendingIntent被创建,android就会为以下所有意图重新进行回收,因为它认为它们相同 - 而且由于第一个没有额外的动作,你和#39;没有得到它。

验证情况的最快方法是给所有操作意图一个动作,就像这样,只是为了区分它们。

ipause.setAction("justSomething");
iplay.setAction("toMakeTheIntents");
istop.setAction("NotEqual")

我相信这可以解决你的问题。

在旁注中,您对所有意图都有相同的操作("暂停")。可能是错误的复制/粘贴。但这不是问题,因为你说你根本没有采取行动。