更新到Android 5.0后,媒体样式通知无法正常工作

Parth doshi

我尝试实现Media Style Notification使用此链接但是,当我最近更新到Android 5.0 SDK时,该createSession方法不起作用。

mMediaPlayer = new MediaPlayer();
mManager = (MediaSessionManager) getSystemService(Context.MEDIA_SESSION_SERVICE);
mSession = mManager.createSession("sample session"); //shows compile error
mController = MediaController.fromToken( mSession.getSessionToken() );

还有其他需要使用的方法吗?当我检查更改日志时,它说createSession不再使用。那么,实现此类媒体样式通知的替代方案是什么。

肾上腺的

您不再使用MediaController.fromToken,而是使用MediaSessin.getController而且您不再使用MediaSessionManager.createSession,而是仅创建一个新MediaSession对象并MediaSession.getSessionToken检索您的对象MediaSession.Token

一个非常基本的示例实现可能类似于:

private static final String ACTION_TOGGLE_PLAYBACK = "com.your.package.name.TOGGLE_PLAYBACK";
private static final String ACTION_PREV = "com.your.package.name.PREV";
private static final String ACTION_NEXT = "com.your.package.name.NEXT";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...

    final Bitmap artwork = ...;

    // Create a new MediaSession
    final MediaSession mediaSession = new MediaSession(this, "debug tag");
    // Update the current metadata
    mediaSession.setMetadata(new MediaMetadata.Builder()
            .putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, artwork)
            .putString(MediaMetadata.METADATA_KEY_ARTIST, "Pink Floyd")
            .putString(MediaMetadata.METADATA_KEY_ALBUM, "Dark Side of the Moon")
            .putString(MediaMetadata.METADATA_KEY_TITLE, "The Great Gig in the Sky")
            .build());
    // Indicate you're ready to receive media commands
    mediaSession.setActive(true);
    // Attach a new Callback to receive MediaSession updates
    mediaSession.setCallback(new MediaSession.Callback() {

        // Implement your callbacks

    });
    // Indicate you want to receive transport controls via your Callback
    mediaSession.setFlags(MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS);

    // Create a new Notification
    final Notification noti = new Notification.Builder(this)
            // Hide the timestamp
            .setShowWhen(false)
            // Set the Notification style
            .setStyle(new Notification.MediaStyle()
                    // Attach our MediaSession token
                    .setMediaSession(mediaSession.getSessionToken())
                    // Show our playback controls in the compat view
                    .setShowActionsInCompactView(0, 1, 2))
            // Set the Notification color
            .setColor(0xFFDB4437)
            // Set the large and small icons
            .setLargeIcon(artwork)
            .setSmallIcon(R.drawable.your_small_icon)
            // Set Notification content information
            .setContentText("Pink Floyd")
            .setContentInfo("Dark Side of the Moon")
            .setContentTitle("The Great Gig in the Sky")
            // Add some playback controls
            .addAction(R.drawable.your_prev_icon, "prev", retreivePlaybackAction(3))
            .addAction(R.drawable.your_pause_icon, "pause", retreivePlaybackAction(1))
            .addAction(R.drawable.your_next_icon, "next", retreivePlaybackAction(2))
            .build();

    // Do something with your TransportControls
    final TransportControls controls = mediaSession.getController().getTransportControls();

    ((NotificationManager) getSystemService(NOTIFICATION_SERVICE)).notify(1, noti);
}

private PendingIntent retreivePlaybackAction(int which) {
    Intent action;
    PendingIntent pendingIntent;
    final ComponentName serviceName = new ComponentName(this, YourPlaybackService.class);
    switch (which) {
        case 1:
            // Play and pause
            action = new Intent(ACTION_TOGGLE_PLAYBACK);
            action.setComponent(serviceName);
            pendingIntent = PendingIntent.getService(this, 1, action, 0);
            return pendingIntent;
        case 2:
            // Skip tracks
            action = new Intent(ACTION_NEXT);
            action.setComponent(serviceName);
            pendingIntent = PendingIntent.getService(this, 2, action, 0);
            return pendingIntent;
        case 3:
            // Previous tracks
            action = new Intent(ACTION_PREV);
            action.setComponent(serviceName);
            pendingIntent = PendingIntent.getService(this, 3, action, 0);
            return pendingIntent;
        default:
            break;
    }
    return null;
}

结果

例子

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

更新到Xamarin Forms 5后,Xamarin表单Android项目TargetFrameworkVersion错误

来自分类Dev

将工具更新到R23后,Eclipse和Android无法正常工作

来自分类Dev

更新到5.0后的android Mediaplayer错误

来自分类Dev

无法更新到Android Studio 2.0

来自分类Dev

更新到MVC5后对实体prob的Linq

来自分类Dev

更新为Canary Preview 5后,Android Studio无法正常工作

来自分类Dev

由于Ruby版本无法更新到Rails 5

来自分类Dev

更新到Windows 8.1后MySQL无法正常工作

来自分类Dev

更新到Windows 8.1后MySQL无法正常工作

来自分类Dev

更新到Ubuntu 15.10后autofs无法正常工作

来自分类Dev

Swifty JSON在更新到Xcode 8后无法正常工作

来自分类Dev

更新到18.04后键盘无法正常工作

来自分类Dev

将 kotlin 更新到 1.2.21 后无法构建 android 项目

来自分类Dev

更新到Android 4.1后出现Android Studio错误

来自分类Dev

更新到Android 5.0后的java.lang.UnsatisfiedLinkError

来自分类Dev

将Android Studio更新到1.5后出现Gradle错误

来自分类Dev

更新到23.3.0后,Android支持库错误

来自分类Dev

在更新到android 3.5.0后Flutter不会建立appbundle

来自分类Dev

将Android Studio更新到2.0后的FragmentBuilder问题

来自分类Dev

更新到9.4.0后,Android Studio Gradle错误

来自分类Dev

将 Android Studio 更新到 2.3 后,Gradle 连接超时

来自分类Dev

更新到 Android 3.0 和 SDK 27 后的错误

来自分类Dev

更新到 Android 3.0.1 后出现 CoordinatorLayout 错误

来自分类Dev

无法将Android的Gradle更新到2.13.0以使用ProtoBuf

来自分类Dev

Android Studio(Linux):无法从2.1.2更新到2.1.3

来自分类Dev

无法将Android Studio从1.3.1更新到1.5.1

来自分类Dev

更新到XCode5后找不到选项'-f的目录

来自分类Dev

更新到MVC5后找不到/ signalr / hub 404

来自分类Dev

将Autofac.Mvc5从3.3.2更新到3.3.3后出现错误

Related 相关文章

  1. 1

    更新到Xamarin Forms 5后,Xamarin表单Android项目TargetFrameworkVersion错误

  2. 2

    将工具更新到R23后,Eclipse和Android无法正常工作

  3. 3

    更新到5.0后的android Mediaplayer错误

  4. 4

    无法更新到Android Studio 2.0

  5. 5

    更新到MVC5后对实体prob的Linq

  6. 6

    更新为Canary Preview 5后,Android Studio无法正常工作

  7. 7

    由于Ruby版本无法更新到Rails 5

  8. 8

    更新到Windows 8.1后MySQL无法正常工作

  9. 9

    更新到Windows 8.1后MySQL无法正常工作

  10. 10

    更新到Ubuntu 15.10后autofs无法正常工作

  11. 11

    Swifty JSON在更新到Xcode 8后无法正常工作

  12. 12

    更新到18.04后键盘无法正常工作

  13. 13

    将 kotlin 更新到 1.2.21 后无法构建 android 项目

  14. 14

    更新到Android 4.1后出现Android Studio错误

  15. 15

    更新到Android 5.0后的java.lang.UnsatisfiedLinkError

  16. 16

    将Android Studio更新到1.5后出现Gradle错误

  17. 17

    更新到23.3.0后,Android支持库错误

  18. 18

    在更新到android 3.5.0后Flutter不会建立appbundle

  19. 19

    将Android Studio更新到2.0后的FragmentBuilder问题

  20. 20

    更新到9.4.0后,Android Studio Gradle错误

  21. 21

    将 Android Studio 更新到 2.3 后,Gradle 连接超时

  22. 22

    更新到 Android 3.0 和 SDK 27 后的错误

  23. 23

    更新到 Android 3.0.1 后出现 CoordinatorLayout 错误

  24. 24

    无法将Android的Gradle更新到2.13.0以使用ProtoBuf

  25. 25

    Android Studio(Linux):无法从2.1.2更新到2.1.3

  26. 26

    无法将Android Studio从1.3.1更新到1.5.1

  27. 27

    更新到XCode5后找不到选项'-f的目录

  28. 28

    更新到MVC5后找不到/ signalr / hub 404

  29. 29

    将Autofac.Mvc5从3.3.2更新到3.3.3后出现错误

热门标签

归档