我们正在将正在进行的播放通知迁移到Lollipop中引入的MediaStyle通知. RemoteControlClient似乎已被弃用,MediaStyle通知不处理媒体按钮事件(例如通过耳机远程暂停/播放).

有没有人得到这项工作? MediaSessionCallback中没有任何事件被调用.

以下是媒体会话的初始化方式

mSession = new MediaSessionCompat(this,TAG);
    mSession.setCallback(new MediaSessionCallback());
    mSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
    mSession.setPlaybackToLocal(AudioManager.STREAM_MUSIC);
    mSession.setActive(true);

以下是设置元数据的方式

MediaMetadataCompat.Builder MetadataBuilder = new MediaMetadataCompat.Builder();
    MetadataBuilder
            .putLong(MediaMetadata.MetaDATA_KEY_DURATION,clip.getDuration())
            .putString(MediaMetadata.MetaDATA_KEY_MEDIA_ID,clip.getClipId())
            .putString(MediaMetadata.MetaDATA_KEY_TITLE,clip.getTitle())
            .putString(MediaMetadata.MetaDATA_KEY_ARTIST,clip.getSourceName())
            .putString(MediaMetadata.MetaDATA_KEY_ALBUM_ART_URI,clip.getimageUrl())
            .putLong(MediaMetadata.MetaDATA_KEY_DURATION,clip.getDuration());
    mSession.setMetadata(MetadataBuilder.build());

最后,通知代码:

MediaSession mediaSession = (MediaSession) session.getMediaSession();
        Notification.Builder builder =
                new Notification.Builder(c)
                        .setDefaults(0)
                        .setSmallIcon(R.drawable.ic_notif)
                        .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
                        .setContentTitle(clip.getTitle())
                        .setContentText(clip.getSourceName())
                        .setProgress((int)duration,(int)progress,false)
                        .setWhen(0)
                        .setContentIntent(pendingIntent);

        if (playing) {
            builder.addAction(R.drawable.ic_media_pause,c.getString(R.string.media_pause),getPendingIntentForKeyCode(app.getApplicationContext(),KeyEvent.KEYCODE_MEDIA_PAUSE));
        } else {
            builder.addAction(R.drawable.ic_media_play,c.getString(R.string.media_play),KeyEvent.KEYCODE_MEDIA_PLAY));
        }
        builder.addAction(R.drawable.ic_media_next,c.getString(R.string.media_next),KeyEvent.KEYCODE_MEDIA_NEXT));

        builder.setStyle(new Notification.MediaStyle()
                .setMediaSession(mediaSession.getSessionToken())
                .setShowActionsInCompactView(new int[] {1,2})
                )
        );

        notification = builder.build();

解决方法

使用您支持的操作在MediaSession中设置播放状态:
PlaybackState state = new PlaybackState.Builder()
        .setActions(
                PlaybackState.ACTION_PLAY | PlaybackState.ACTION_PLAY_PAUSE |
                PlaybackState.ACTION_PLAY_FROM_MEDIA_ID | PlaybackState.ACTION_PAUSE |
                PlaybackState.ACTION_SKIP_TO_NEXT | PlaybackState.ACTION_SKIP_TO_PREVIoUS)
        .setState(PlaybackState.STATE_PLAYING,position,speed,SystemClock.elapsedRealtime())
        .build();
mSession.setPlaybackState(state);

android – MediaStyle通知没有响应RemoteControl事件.的更多相关文章

  1. Swift-ReactiveCocoa3.0二SignalProducer 2

    lift运算符|>内部也是调用了lift方法,作用是把原producer的结果transform完返回新的类型/值,再封装成新的producer返回。只有在第一个producer销毁后才会响应第二个producer。之后,每当其中一个再sendNext,都会在next回调zipwith压缩两个信号,每当两个都sendNext一次才回在next回调一次。例子:sampleOn采样,当sampleOn的信号sendNext一次,就取一次producer1的最新一次sendNext的值进行next回调takeu

  2. 如何在Swift中调用C函数

    “,选择Yes,创建SwiftCallC-Bridging-Header.h文件给工程建立一个C语言文件。跟上述步骤3类似,只不过这里选择的是C文件,这里的文件取名为CFile.c,同时自动生成CFile.h文件开始编写代码。在SwiftCallC-Bridging-Header.h文件中声明C函数,这里是voidcallCDemo()在CFile.c中定义这个函数在main.swift中调用这个C函数编译运行

  3. Swift--UINavigationController

    代码目录AppDelegate.swiftViewController.swiftNext.swift效果图

  4. Swift如何取得View所属的ViewController

    从VC取得View很容易,但有些情况下我们需要从View反向获取VC.不过在一些特殊的场合,Cocoa库帮我们想的很周到,比如在自定义view过渡动画的时候:系统在回调我们的animateTransition方法时,会传入一个context参数,从它我们可以轻松取得参与动画的toView,fromView以及它们对应的VC:但不是所有情况系统都会帮你考虑的这么周到,所以有时候还得需要自己从View

  5. RxSwift使用教程大全 韩俊强的博客

    记录大多数ReactiveX的概念和操作符。我们还需要使用KVO来检测变量的值改变。Rx就是为解决这些问题而生的。Observable理解RxSwift的关键是理解Observable的概念。使用variable的好处是variable将不会显式的发送Error或者Completed。

  6. swift – 全局函数序列(state:next :)和类型推断

    3,让seq2=4…

  7. 数组 – 封闭平面嵌套对象?

    我开始学习闭包,并希望在我正在开发的项目中实现它们,我想要一些帮助.我有一个类定义如下:我想使用闭包或更高级的函数来展平[MyObject]并将所有MyObject和subOjects连接成一个数组.我尝试使用[MyObject].flatMap(),但此操作不返回嵌套的子对象.展平递归类结构的一种方法是使用递归函数.这是我们想要展平的课程:以下是演示如何完成此操作的函数:这种方法的核心是recursiveFlat本地函数.它将嵌套对象的内容附加到结果中,然后有条件地为每个元素调用自身以添加其内容.

  8. android – MediaStyle通知没有响应RemoteControl事件.

    我们正在将正在进行的播放通知迁移到Lollipop中引入的MediaStyle通知.RemoteControlClient似乎已被弃用,MediaStyle通知不处理媒体按钮事件(例如通过耳机远程暂停/播放).有没有人得到这项工作?MediaSessionCallback中没有任何事件被调用.以下是媒体会话的初始化方式以下是设置元数据的方式最后,通知代码:解决方法使用您支持的操作在MediaSes

  9. 如何在Android上以不同的方法取消Toast?

    我有以下代码:但是如果displayNextMovie被快速调用几次,然后显示displayPrevMovie,“Next”Toast仍然显示,只有在显示“Prev”之后.看起来取消不正常.解决方法每次您想要显示一个新的文本时,您可以轻松地只保留一个Toast对象,而不需要创建一个新的Toast对象,并取消当前的Toast.在显示下一个Toast之前,您可以使用Toast.setText()函数更改文本.示例代码:

  10. canvas实现贪食蛇的实践

    本文主要介绍了canvas实现贪食蛇的实践,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

随机推荐

  1. bluetooth-lowenergy – Altbeacon库无法在Android 5.0上运行

    昨天我在Nexus4上获得了Android5.0的更新,并且altbeacon库停止了检测信标.似乎在监视和测距时,didEnterRegion和didRangeBeaconsInRegion都没有被调用.即使RadiusNetworks的Locate应用程序现在表现不同,一旦检测到信标的值,它们就不再得到更新,并且通常看起来好像信标超出了范围.我注意到的一点是,现在在logcat中出现以下行“B

  2. android – react-native动态更改响应者

    我正在使用react-native进行Android开发.我有一个视图,如果用户长按,我想显示一个可以拖动的动画视图.我可以使用PanResponder实现这一点,它工作正常.但我想要做的是当用户长按时,用户应该能够继续相同的触摸/按下并拖动新显示的Animated.View.如果您熟悉Google云端硬盘应用,则它具有类似的功能.当用户长按列表中的任何项目时,它会显示可拖动的项目.用户可以直接拖

  3. android – 是否有可能通过使用与最初使用的证书不同的证书对其进行签名来发布更新的应用程序

    是否可以通过使用与最初使用的证书不同的证书进行签名来发布Android应用程序的更新?我知道当我们尝试将这样的构建上传到市场时,它通常会给出错误消息.但有没有任何出路,比如将其标记为主要版本,指定市场中的某个地方?解决方法不,你不能这样做.证书是一种工具,可确保您是首次上传应用程序的人.所以总是备份密钥库!

  4. 如何检测Android中是否存在麦克风?

    ..所以我想在让用户访问语音输入功能之前检测麦克风是否存在.如何检测设备上是否有麦克风.谢谢.解决方法AndroidAPI参考:hasSystemFeature

  5. Android – 调用GONE然后VISIBLE使视图显示在错误的位置

    我有两个视图,A和B,视图A在视图B上方.当我以编程方式将视图A设置为GONE时,它将消失,并且它正下方的视图将转到视图A的位置.但是,当我再次将相同的视图设置为VISIBLE时,它会在视图B上显示.我不希望这样.我希望视图B回到原来的位置,这是我认为会发生的事情.我怎样才能做到这一点?编辑–代码}这里是XML:解决方法您可以尝试将两个视图放在RelativeLayout中并相对于彼此设置它们的位置.

  6. android – 获得一首歌的流派

    我如何阅读与歌曲相关的流派?我可以读这首歌,但是如何抓住这首歌的流派,它存放在哪里?解决方法检查此代码:

  7. android – 使用textShadow折叠工具栏

    我有一个折叠工具栏的问题,在展开状态我想在文本下面有一个模糊的阴影,我使用这段代码:用:我可以更改textColor,它可以工作,但阴影不起作用.我为阴影尝试了很多不同的值.是否可以为折叠文本投射阴影?

  8. android – 重用arm共享库

    我已经建立了armarm共享库.我有兴趣重用一个函数.我想调用该函数并获得返回值.有可能做这样的事吗?我没有任何头文件.我试过这个Android.mk,我把libtest.so放在/jni和/libs/armeabi,/lib/armeabi中.此时我的cpp文件编译,但现在是什么?我从objdump知道它的名字编辑:我试图用这个android.mk从hello-jni示例中添加prebuild库:它工作,但libtest.so相同的代码显示以下错误(启动时)libtest.so存在于libhello-j

  9. android – 为NumberPicker捕获键盘’Done’

    我有一个AlertDialog只有一些文本,一个NumberPicker,一个OK和一个取消.(我知道,这个对话框还没有做它应该保留暂停和恢复状态的事情.)我想在软键盘或其他IME上执行“完成”操作来关闭对话框,就像按下了“OK”一样,因为只有一个小部件可以编辑.看起来处理IME“Done”的最佳方法通常是在TextView上使用setonEditorActionListener.但我没有任何Te

  10. android – 想要在调用WebChromeClient#onCreateWindow时知道目标URL

    当我点击一个带有target=“_blank”属性的超链接时,会调用WebChromeClient#onCreateWindow,但我找不到新的窗口将打开的新方法?主页url是我唯一能知道的东西?我想根据目标网址更改应用行为.任何帮助表示赞赏,谢谢!

返回
顶部