通知中的音乐播放器控制

Posted

技术标签:

【中文标题】通知中的音乐播放器控制【英文标题】:Music player control in notification 【发布时间】:2014-06-20 01:42:12 【问题描述】:

如何在android中设置带有播放/暂停、下一个和上一个按钮的通知!

我是 Android 新手,也遇到堆栈溢出问题。所以请多多包涵。

我在歌曲开始播放时设置通知,如下所示:

`

@SuppressLint("NewApi")
public void setNotification(String songName)
    String ns = Context.NOTIFICATION_SERVICE;
    NotificationManager notificationManager = (NotificationManager) getSystemService(ns);


    @SuppressWarnings("deprecation")
    Notification notification = new Notification(R.drawable.god_img, null, System.currentTimeMillis());

    RemoteViews notificationView = new RemoteViews(getPackageName(), R.layout.notification_mediacontroller);

    //the intent that is started when the notification is clicked (works)
    Intent notificationIntent = new Intent(this, AudioBookListActivity.class);
    PendingIntent pendingNotificationIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

    notification.contentView = notificationView;
    notification.contentIntent = pendingNotificationIntent;
    notification.flags |= Notification.FLAG_NO_CLEAR;

    //this is the intent that is supposed to be called when the button is clicked
    Intent switchIntent = new Intent(this, AudioPlayerBroadcastReceiver.class);
    PendingIntent pendingSwitchIntent = PendingIntent.getBroadcast(this, 0, switchIntent, 0);

    notificationView.setOnClickPendingIntent(R.id.btn_play_pause_in_notification, pendingSwitchIntent);
    notificationManager.notify(1, notification);        

`

我创建了如下所示的 BroadcastReceiver: `

   private class AudioPlayerBroadcastReceiver extends BroadcastReceiver 
    @Override
    public void onReceive(Context context, Intent intent) 
        String action = intent.getAction();
        System.out.println("intent action = " + action);
        long id = intent.getLongExtra("id", -1);

        if(Constant.PLAY_ALBUM.equals(action)) 
            //playAlbum(id);
         else if(Constant.QUEUE_ALBUM.equals(action)) 
            //queueAlbum(id);
         else if(Constant.PLAY_TRACK.equals(action)) 
            //playTrack(id);
         else if(Constant.QUEUE_TRACK.equals(action)) 
            //queueTrack(id);
         else if(Constant.PLAY_PAUSE_TRACK.equals(action)) 
 //                playPauseTrack();
            System.out.println("press play");
         else if(Constant.HIDE_PLAYER.equals(action)) 
 //                hideNotification();
            System.out.println("press next");
        
        else 
        
    

`

现在,我成功设置了自定义通知,但我如何处理通知按钮及其事件,如播放/暂停、上一个和下一个...等。我也尝试使用广播接收器,但无法得到任何响应。

寻求专家的解决方案和指导,请帮助我。

提前致谢。

【问题讨论】:

关注这个..***.com/questions/12526228/… 【参考方案1】:

您需要设置custom intent action,而不是AudioPlayerBroadcastReceiver 组件类。

使用这样的自定义操作名称创建一个 Intent

  Intent switchIntent = new Intent("com.example.app.ACTION_PLAY");

然后,注册PendingIntentBroadcast接收器

  PendingIntent pendingSwitchIntent = PendingIntent.getBroadcast(this, 100, switchIntent, 0);

然后,为播放控件设置一个onClick,如果需要,对其他控件执行类似的自定义操作。

  notificationView.setOnClickPendingIntent(R.id.btn_play_pause_in_notification, pendingSwitchIntent);

接下来,像这样在AudioPlayerBroadcastReceiver注册自定义动作

   <receiver android:name="com.example.app.AudioPlayerBroadcastReceiver" >
        <intent-filter>
            <action android:name="com.example.app.ACTION_PLAY" />
        </intent-filter>
    </receiver>

最后,当在NotificationRemoteViews布局上点击播放时,您将收到BroadcastReceiverplay action

public class AudioPlayerBroadcastReceiver extends BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent) 

    String action = intent.getAction();

    if(action.equalsIgnoreCase("com.example.app.ACTION_PLAY"))
        // do your stuff to play action;
    
   

编辑:如何为代码中注册的广播接收器设置意图过滤器

您还可以像这样从注册的Broadcast receiver 的代码中设置Custom ActionIntent filter

    // instance of custom broadcast receiver
    CustomReceiver broadcastReceiver = new CustomReceiver();

    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addCategory(Intent.CATEGORY_DEFAULT);
    // set the custom action
    intentFilter.addAction("com.example.app.ACTION_PLAY");
    // register the receiver
    registerReceiver(broadcastReceiver, intentFilter); 

【讨论】:

你能帮我吗我的应用程序以某种方式终止,我没有找到如何重新启动应用程序 我的应用程序已终止但通知未终止在这种情况下该怎么办? @PriyankaChauhan 您可以在ondestroy() 中关闭通知,以防您的活动被杀死,通知也将关闭。 但如果应用程序被操作系统终止,onDestroy() 不会调用 如何在执行专辑封面、标题等未决意图后更改视图?

以上是关于通知中的音乐播放器控制的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 BLE 控制 iOS 设备中的音乐播放器

unity怎么播放多个音乐

Android开发本地及网络Mp3音乐播放器(十九)通知媒体库更新刚下载的MP3

播放音乐时,我的音频应用程序中没有收到通知或消息的声音 | AV音频播放器

今日 iOS 8 小部件中的音乐播放器控件

收到本地通知时无法播放音乐,当应用程序处于后台状态时