【问题标题】:Android broadcast intent for audio playback?Android广播意图用于音频播放?
【发布时间】:2013-08-11 23:10:05
【问题描述】:

我正在尝试构建一个 Android 应用,它使用广播接收器来检测音乐播放何时开始,然后提供手势控制以触发发送回跳曲目意图。

首先,我只想将接收器设置为在音频播放开始时触发通知,以便我可以检查这个概念是否有效。我已经在清单文件中声明了一个服务和一个接收器,并且我创建了一个服务类(希望)通过 onCreate() 创建一个通知。

虽然我已经抓取了大量文档,但似乎无法找到正确的意图来使用我的接收器进行监听。肯定有这方面的东西吗?

问候。

【问题讨论】:

    标签: android


    【解决方案1】:

    事实证明,Android 3.1 及更高版本中有一项新的安全功能,即在用户手动打开应用程序至少一次之前,广播接收器不会注册。由于我试图构建一个没有 UI 可打开的仅服务应用程序,因此这阻止了我所有的意图侦听器尝试工作。

    我已经修改为具有启动屏幕活动,现在一切都按我希望的那样工作。我现在正在整理一份播放器特定意图的列表,但对于那些试图构建类似东西的人来说,com.android.music.playstatechanged 似乎是最好的开始。当音乐开始、暂停或恢复时,默认播放器 (Google Play Music) 会触发此播放器,并将其自身与额外数据捆绑在一起,包括布尔“正在播放”属性以区分播放和暂停状态。

    基本上,这是我现在使用的核心接收器。玩得开心!

    public class MainReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
    
            // Start the service when music plays, stop the service when music ends.
            if(intent.hasExtra("playing")) {
                if(intent.getBooleanExtra("playing", false)) {
                    Intent service = new Intent(context, MainService.class);
                    context.startService(service);
                } else {
                    Intent service = new Intent(context, MainService.class);
                    context.stopService(service);
                }
            }
        }
    }
    

    【讨论】:

    • Ric,能否请您提一下在清单文件中写什么来接收媒体正在播放的广播?谢谢。
    • 给你,老鼠屎拉塔图耶。这应该接收来自默认 Play Music 应用和官方 Last.fm 应用的意图:pastebin.com/ycjDbq3H
    【解决方案2】:

    肯定有这方面的东西吗?

    有成千上万的音乐播放器。没有人有义务广播任何内容,更不用说有关曲目的信息了。并且没有人有义务允许您通过任何方式“跳过曲目”。

    欢迎您搜索特定的音乐播放器,这些播放器为此类事物提供了文档化且受支持的 API。

    【讨论】:

    • 嗨 CommonsWare,我应该更具体一些 - 大多数媒体播放器(Grooveshark、Last.fm 等)似乎触发了相同的锁屏媒体小部件 - 即带有 prev/next/ 的那个Android 4 中的播放/暂停按钮,所以我假设这些播放器使用 MediaPlayer 系统,而我想要支持的正是这些类型的应用。
    • 哦,我希望将 com.android.music.musicservicecommand.next 用于曲目跳过意图。据我所知,这是锁屏小部件发出的内容,所以我也可以将其发送出去 :-)
    • @Ric:AFAIK,那些不是广播,或者如果是,它们没有记录。此类媒体播放器使用AudioManager 注册RemoteControlClient。 “哦,我希望将 com.android.music.musicservicecommand.next 用于跳过曲目的意图”——这是未记录的,不受支持的,并且不必由任何人实现。欢迎您来探索一些新的media routing stuff,尽管我不知道它支持哪些版本的 Android。
    • 我似乎很难找到文档!参考 musicservicecommand.next,我在那里犯了一个轻微的复制+粘贴错误,这意味着几乎相同的 com.android.music.musicservicecommand.next 意图。文档的方式似乎并不多,但github.com/android/platform_packages_apps_music/blob/master/src/… 在第 101 行引用了它,而这篇较旧的 StackOverflow 帖子声称它可以在 Android 2.1 中工作,stackoverflow.com/questions/6921075/…
    • @Ric:“文档的方式似乎并不多”——这是因为此广播是一个应用程序(AOSP 音乐应用程序)的私有实现细节。它存在的事实并不意味着它必须被记录在案。该广播可以在谷歌想要的任何时候被禁用,例如通过使用signature-level 权限来控制谁可以发送它。而且,AOSP 音乐应用是成千上万的音乐应用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 2013-09-06
    • 2015-01-02
    • 1970-01-01
    相关资源
    最近更新 更多