`

[AndroidTips]通过广播Intent控制Android系统自带的音乐播放器

 
阅读更多

http://blog.csdn.net/ZhengZhiRen/article/details/6134730

 

Android自带的音乐播放器只能算是系统之上的应用,并不包含在SDK中,因此SDK文档中没有提及。但是,有时我们需要控制系统音乐播放器的行为,比如切换歌曲、暂停/继续等。这就只能从这个应用的源代码着手了。

 

这是播放器的代码树:

http://android.git.kernel.org/?p=platform/packages/apps/Music.git;a=tree

 

可以看到,音乐的播放是由MediaPlaybackService 这个服务实现的:

http://android.git.kernel.org/?p=platform/packages/apps/Music.git;a=blob;f=src/com/android/music/MediaPlaybackService.java;h=7c0bbedbedef49bf4c38ef97fdcd0f1017bf5d35;hb=HEAD

 

在服务的onCreate函数中,注册了IntentFilter和BroadcastReceiver。

public void onCreate() {
    super.onCreate();
    ……
    IntentFilter commandFilter = new IntentFilter();
    commandFilter.addAction(SERVICECMD);
    commandFilter.addAction(TOGGLEPAUSE_ACTION);
    commandFilter.addAction(PAUSE_ACTION);
    commandFilter.addAction(NEXT_ACTION);
    commandFilter.addAction(PREVIOUS_ACTION);
    registerReceiver(mIntentReceiver, commandFilter);
    ……
}

 

这些Action常量在类的开头定义为:

public static final String SERVICECMD = "com.android.music.musicservicecommand";
public static final String CMDNAME = "command";
public static final String CMDTOGGLEPAUSE = "togglepause";
public static final String CMDSTOP = "stop";
public static final String CMDPAUSE = "pause";
public static final String CMDPREVIOUS = "previous";
public static final String CMDNEXT = "next";
public static final String TOGGLEPAUSE_ACTION = "com.android.music.musicservicecommand.togglepause";
public static final String PAUSE_ACTION = "com.android.music.musicservicecommand.pause";
public static final String PREVIOUS_ACTION = "com.android.music.musicservicecommand.previous";
public static final String NEXT_ACTION = "com.android.music.musicservicecommand.next";

 

BroadcastReceiver接收和IntentFilter匹配的Intent。根据intent.getAction或intent.getStringExtra("command")的内容,进行相应操作,控制播放器的播放。

private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        String cmd = intent.getStringExtra("command");
        MusicUtils.debugLog("mIntentReceiver.onReceive " + action + " / " + cmd);
        if (CMDNEXT.equals(cmd) || NEXT_ACTION.equals(action)) {
            next(true);
        } else if (CMDPREVIOUS.equals(cmd) || PREVIOUS_ACTION.equals(action)) {
            prev();
        } else if (CMDTOGGLEPAUSE.equals(cmd) || TOGGLEPAUSE_ACTION.equals(action)) {
            if (isPlaying()) {
                pause();
                mPausedByTransientLossOfFocus = false;
            } else {
                play();
            }
        } else if (CMDPAUSE.equals(cmd) || PAUSE_ACTION.equals(action)) {
            pause();
            mPausedByTransientLossOfFocus = false;
        } else if (CMDSTOP.equals(cmd)) {
            pause();
            mPausedByTransientLossOfFocus = false;
            seek(0);
        } else if (MediaAppWidgetProvider.CMDAPPWIDGETUPDATE.equals(cmd)) {
            // Someone asked us to refresh a set of specific widgets, probably
            // because they were just added.
            int[] appWidgetIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);
            mAppWidgetProvider.performUpdate(MediaPlaybackService.this, appWidgetIds);
        }
    }
};

 

由此,我们可以通过广播intent控制播放器了:

Intent intent = new Intent("上面那几个常量");
sendBroadcast(intent);

 

参考资料:

http://www.poemcode.net/2009/11/android_music/

http://android.git.kernel.org/?p=platform/packages/apps/Music.git;a=tree

 

分享到:
评论

相关推荐

    android系统广播大全 Intent跳转界面

    Android 系统广播大全 Intent 跳转界面 Android 系统广播大全 Intent 跳转界面是一种机制,允许应用程序之间进行交互和通信。Intent 是 Android 中的一种机制,可以将动作和数据封装起来,用于启动 Activity、服务...

    Android简易本地音乐播放器源码,基于Android的简易本地音乐播放器源码

    在Android平台上,开发一个简易本地音乐播放器是一项常见的任务,对于初学者来说是学习Android音频处理和用户界面设计的良好实践。这个"Android简易本地音乐播放器源码"提供了实现这样一个功能的基本框架。以下是对...

    Android 广播大全 Intent Action 事件.

    Android 广播大全 Intent Action 事件是 Android 系统中的一种核心机制,用于在应用程序之间传递信息和事件通知。 Intent 是一种轻量级的消息对象,用于描述一个操作的请求或描述一个事件。 以下是 Android 广播...

    android实战 音乐播放器(android studio源程序工程)

    3. **UI设计**:使用Android的布局管理系统(如LinearLayout, RelativeLayout或ConstraintLayout)创建音乐播放器的界面,包括播放/暂停按钮、进度条、歌曲列表等。还需理解XML布局文件的编写和与Java代码的交互。 ...

    android studio手机MP3音乐播放器

    【Android Studio 手机MP3音乐播放器】是一款基于Android Studio开发的应用程序,它允许用户在他们的智能手机上播放MP3格式的音乐文件。这个项目涵盖了Android应用开发的基础知识,包括UI设计、媒体处理、文件操作...

    Android广播接实现监听电话状态(电话的状态,拦截)

    在Android平台上,对电话状态的监听和拦截是一个需要特别权限和精确实现的敏感操作,这涉及到Android的权限管理、广播接收器(BroadcastReceiver)、事件监听机制以及电话状态的处理。以下知识点将详细介绍如何实现这...

    Android的Intent实验

    在Android开发中,Intent是一种非常重要的组件,它用于在应用程序的不同组件之间传递消息,实现活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)以及内容提供者(Content Provider)之间的交互...

    Android音乐播放器 原码

    通过对这个“Android音乐播放器原码”的深入研究,开发者可以全面掌握Android音乐播放应用的实现细节,包括多媒体处理、广播接收器的使用,以及系统服务和用户界面的设计。这将对提升Android应用开发能力大有裨益。...

    Android 常用系统广播

    Android系统广播是Android应用开发中一种重要的机制,它允许应用程序接收系统发送的事件通知。这些事件可以是硬件变化、系统状态变化或者用户的某些操作等。以下是根据提供的文件内容整理的Android常用系统广播知识...

    Android实现音乐播放器——课程设计报告,优秀课设

    【Android实现音乐播放器——课程设计报告,优秀课设】是一个关于移动应用开发的课程设计项目,主要目标是让学生熟练掌握Android程序开发的各种技术,包括基础的UI界面设计、数据存储、Activity、Service、SQLite...

    基于android的音乐播放器

    【基于Android的音乐播放器】是一款专为Android操作系统设计的应用程序,它允许用户在移动设备上轻松管理和播放他们的音乐库。这款应用集成了常见的音乐播放功能,如播放、暂停、快进、后退,以及创建播放列表等。...

    基于Android的音乐播放器的源代码和app

    Android系统通过BroadcastIntent发送系统级广播,比如设备锁屏、解锁、耳机插入等事件。音乐播放器可以通过BroadcastReceiver监听这些事件,自动调整播放状态,如锁屏后暂停播放,耳机插入时恢复播放。 七、权限...

    android 调用系统自带录音机

    总的来说,调用Android系统自带录音机是一项基础且实用的功能,通过Intent和MediaRecorder类的结合使用,我们可以轻松实现这一功能。然而,根据实际需求,有时可能需要自定义录音逻辑,以提供更加定制化的用户体验。...

    Android通过Intent传递数据

    "Android通过Intent传递数据"这一主题,涵盖了Intent的基本使用和数据传递的方式。 Intent分为显式Intent和隐式Intent。显式Intent明确指定要启动的目标组件,而隐式Intent则不指定具体接收者,而是根据Intent的...

    android.intent.action.TIME_TICK

    在给定的标题"android.intent.action.TIME_TICK"中,涉及的是一个特定的系统广播,当系统时间每分钟改变时,这个广播就会被发送。这个广播事件对于那些需要定时更新或依赖于系统时间的应用程序非常有用。 描述中...

    android系统广播

    Android 系统广播大全 Android 系统广播是 Android 操作系统中的一种机制,用于在应用程序之间进行通信和交互。它允许不同的应用程序和系统组件之间进行通信,实现了数据的共享和交互。 Android 系统广播大全涵盖了...

    android音乐播放器

    这款"android音乐播放器"项目旨在帮助开发者了解如何在Android系统中搜索、管理并播放本地音乐文件。下面将详细介绍该项目中的关键知识点。 一、Android MediaStore API 在Android中,Music播放器首先需要能够获取...

    Android应用源码之Intent1_Intent.zip

    - 广播通信:通过发送广播Intent,多个组件可以监听并响应同一事件,如网络状态改变、设备时间更新等。 - 启动PendingIntent:用于在通知、AlarmManager等场景下间接启动一个Activity或Service。 6. **Intent ...

    Android利用Intent启动和关闭Activity

    总的来说,Intent是Android中非常重要的一个概念,它使得组件间的通信变得简单且灵活,是实现应用动态行为和流程控制的关键工具。通过理解并熟练运用Intent,开发者可以构建出更加丰富多彩的Android应用程序。

    Android studio音乐播放器

    总结来说,创建一个Android Studio音乐播放器项目涉及了Android开发中的多个关键知识点,包括`MediaPlayer`的使用、UI设计、Service的绑定与通信、ListView的实现、SeekBar的控制以及网络下载管理。通过实践这些功能...

Global site tag (gtag.js) - Google Analytics