Mediastyle通知在安卓11中不起作用。

huangapple go评论85阅读模式
英文:

Mediastyle notifications not working in android 11

问题

以下是您的代码翻译部分:

  1. public static final String CHANNEL_ID = "Channel1";
  2. //public static final String ACTION_PREVIOUS = "actionprevious";
  3. public static final String ACTION_PLAY = "actionplay";
  4. public static final String ACTION_EXIT = "actionexit";
  5. //public static final String ACTION_NEXT = "actionnext";
  6. public static Notification notification;
  7. public static void createNotification(Context context, Track track, int playbutton, int exitApp, int pos, int size) {
  8. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  9. NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(context);
  10. MediaSessionCompat mediaSessionCompat = new MediaSessionCompat(context, "tag");
  11. mediaSessionCompat.setActive(true);
  12. Bitmap icon = BitmapFactory.decodeResource(context.getResources(), R.drawable.half);
  13. Intent intentPlay = new Intent(context, NotificationActionService.class)
  14. .setAction(ACTION_PLAY);
  15. PendingIntent pendingIntentPlay = PendingIntent.getBroadcast(context, 0,
  16. intentPlay, PendingIntent.FLAG_UPDATE_CURRENT);
  17. Intent intentExit = new Intent(context, NotificationActionService.class)
  18. .setAction(ACTION_EXIT);
  19. PendingIntent pendingIntentExit = PendingIntent.getBroadcast(context, 0,
  20. intentExit, PendingIntent.FLAG_UPDATE_CURRENT);
  21. exitApp = R.drawable.ic_close_black;
  22. Intent intentOpenApp = new Intent(context, MainActivity.class);
  23. PendingIntent pendingIntentOpenApp = PendingIntent.getActivity(context, 0,
  24. intentOpenApp, 0);
  25. Notification.MediaStyle style = new Notification.MediaStyle();
  26. androidx.core.app.NotificationCompat.Builder builder = new androidx.core.app.NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID)
  27. //NotificationCompat.Builder builder = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID);
  28. .setSmallIcon(R.drawable.ic_audiotrack)
  29. .setVisibility(androidx.core.app.NotificationCompat.VISIBILITY_PUBLIC)
  30. .setLargeIcon(icon)
  31. .setContentTitle("TEST")
  32. .setContentText(notificationText)
  33. .setContentIntent(pendingIntentOpenApp)
  34. .setShowWhen(false)
  35. .setOngoing(true)
  36. .setBadgeIconType(androidx.core.app.NotificationCompat.BADGE_ICON_NONE)
  37. .setOnlyAlertOnce(true)
  38. .addAction(action)
  39. .addAction(generateAction(R.drawable.ic_close_black, "Exit", ACTION_EXIT))
  40. .setStyle(new NotificationCompat.MediaStyle()
  41. .setShowActionsInCompactView(0, 1)
  42. .setMediaSession(mediaSession.getSessionToken()));
  43. mediaSession.setMetadata(new MediaMetadataCompat.Builder()
  44. .putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, icon)
  45. .putString(MediaMetadata.METADATA_KEY_TITLE, "TEST TITLE")
  46. .putString(MediaMetadata.METADATA_KEY_ARTIST, "TEST ARTIST")
  47. .build());
  48. startForeground(1, builder.build());
  49. }
  50. }

注意:此翻译只包括代码部分,不包含任何问题回答或其他内容。

英文:

My custom mediastyle notification no longer works in Android 11 for my music app. It works fine in Android 10 and previous versions.

Is there any other code I need to add so that it works in Android 11.

I should add that getting rid of the " .setMediaSession(mediaSessionCompat.getSessionToken())) " line gives me a notification, but its not an Oreo notification with the full background color, etc.

Here is my code for creating notifications:

  1. public static final String CHANNEL_ID = "Channel1";
  2. //public static final String ACTION_PREVIOUS = "actionprevious";
  3. public static final String ACTION_PLAY = "actionplay";
  4. public static final String ACTION_EXIT = "actionexit";
  5. //public static final String ACTION_NEXT = "actionnext";
  6. public static Notification notification;
  7. public static void createNotification(Context context, Track track, int playbutton, int exitApp, int pos, int size) {
  8. if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.O) {
  9. NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(context);
  10. MediaSessionCompat mediaSessionCompat = new MediaSessionCompat(context, "tag"); /
  11. mediaSessionCompat.setActive(true);
  12. Bitmap icon = BitmapFactory.decodeResource(context.getResources(),R.drawable.half);
  13. Intent intentPlay = new Intent(context, NotificationActionService.class)
  14. .setAction(ACTION_PLAY);
  15. PendingIntent pendingIntentPlay = PendingIntent.getBroadcast(context, 0,
  16. intentPlay, PendingIntent.FLAG_UPDATE_CURRENT);
  17. Intent intentExit = new Intent(context, NotificationActionService.class)
  18. .setAction(ACTION_EXIT);
  19. PendingIntent pendingIntentExit = PendingIntent.getBroadcast(context, 0,
  20. intentExit, PendingIntent.FLAG_UPDATE_CURRENT);
  21. exitApp = R.drawable.ic_close_black;
  22. Intent intentOpenApp = new Intent(context, MainActivity.class);
  23. PendingIntent pendingIntentOpenApp = PendingIntent.getActivity(context,0,
  24. intentOpenApp, 0);
  25. Notification.MediaStyle style = new Notification.MediaStyle();
  26. androidx.core.app.NotificationCompat.Builder builder = new androidx.core.app.NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID)
  27. //NotificationCompat.Builder builder = new NotificationCompat.Builder( this, NOTIFICATION_CHANNEL_ID );
  28. .setSmallIcon(R.drawable.ic_audiotrack)
  29. .setVisibility(androidx.core.app.NotificationCompat.VISIBILITY_PUBLIC)
  30. .setLargeIcon(icon)
  31. .setContentTitle( "TEST" )
  32. .setContentText(notificationText)
  33. .setContentIntent(pendingIntentOpenApp)
  34. .setShowWhen(false)
  35. .setOngoing(true) .setBadgeIconType(androidx.core.app.NotificationCompat.BADGE_ICON_NONE)
  36. .setOnlyAlertOnce(true)
  37. .addAction(action)
  38. .addAction(generateAction(R.drawable.ic_close_black, "Exit", ACTION_EXIT))
  39. .setStyle(new NotificationCompat.MediaStyle()
  40. .setShowActionsInCompactView(0,1)
  41. .setMediaSession(mediaSession.getSessionToken()));
  42. mediaSession.setMetadata
  43. (new MediaMetadataCompat.Builder()
  44. .putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART,icon)
  45. .putString(MediaMetadata.METADATA_KEY_TITLE, "TEST TITLE")
  46. .putString(MediaMetadata.METADATA_KEY_ARTIST, "TEST ARTIST")
  47. .build()
  48. );
  49. startForeground(1, builder.build());
  50. }
  51. }

答案1

得分: 10

你现在还需要向媒体会话添加元数据:

  1. mediaSessionCompat.setMetadata(
  2. new MediaMetadataCompat.Builder()
  3. .putString(MediaMetadata.METADATA_KEY_TITLE, track.getTitle())
  4. .putString(MediaMetadata.METADATA_KEY_ARTIST, track.getArtist())
  5. .build()
  6. );
英文:

You now need to add metadata to your media session as well:

  1. mediaSessionCompat.setMetadata(
  2. new MediaMetadataCompat.Builder()
  3. .putString(MediaMetadata.METADATA_KEY_TITLE, track.getTitle())
  4. .putString(MediaMetadata.METADATA_KEY_ARTIST, track.getArtist())
  5. .build()
  6. );

答案2

得分: 2

我遇到了同样的问题,只有当我将compileSdkVersion设置为30时,我才能解决它。

英文:

I had same issue and was able to resolve it only once I set compileSdkVersion to 30.

答案3

得分: 0

刚刚遇到了同样的问题。事实证明,对于Mediastyle通知,.setOngoing(true) 似乎无法正常工作。一旦我将其移除,通知就能正确显示。

英文:

Just had the same problem. Turns out .setOngoing(true) doesn't seem to work right with Mediastyle notifications. Once I removed it, the notification showed up correctly.

答案4

得分: 0

这有一个简单的解决方法。只需在 mediaSessionCompat 声明后添加以下几行代码。

  1. mediaSessionCompat = new MediaSessionCompat(this, "tag");
  2. mediaSessionCompat.setMetadata(
  3. new MediaMetadataCompat.Builder()
  4. .putString(MediaMetadata.METADATA_KEY_TITLE, "歌曲标题")
  5. .putString(MediaMetadata.METADATA_KEY_ARTIST, "艺术家")
  6. .build());

希望对你有所帮助。

英文:

There is a simple solution to it. Just add these lines after mediaSessionCompat declaration.

  1. mediaSessionCompat=new MediaSessionCompat(this,"tag");
  2. mediaSessionCompat.setMetadata(
  3. new MediaMetadataCompat.Builder()
  4. .putString(MediaMetadata.METADATA_KEY_TITLE,"Song Title")
  5. .putString(MediaMetadata.METADATA_KEY_ARTIST,"Artist")
  6. .build());

Hope this helps.

答案5

得分: 0

setStyle(..) 后添加 mMediaSession.setMetadata(..)

  1. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  2. ...
  3. mBuilder.setStyle(new androidx.media.app.NotificationCompat.MediaStyle()
  4. .setMediaSession(mMediaSession.getSessionToken())
  5. .setShowCancelButton(true)
  6. .setShowActionsInCompactView(0, 1, 2)
  7. .setCancelButtonIntent(
  8. MediaButtonReceiver.buildMediaButtonPendingIntent(
  9. context, PlaybackStateCompat.ACTION_STOP)))
  10. .addAction(new NotificationCompat.Action(
  11. R.drawable.ic_noti_previous, "Previous",
  12. ppreviousIntent))
  13. .addAction(new NotificationCompat.Action(
  14. R.drawable.ic_noti_pause, "Pause",
  15. pplayIntent))
  16. .addAction(new NotificationCompat.Action(
  17. R.drawable.ic_noti_next, "Next",
  18. pnextIntent))
  19. .addAction(new NotificationCompat.Action(
  20. R.drawable.ic_noti_close, "Close",
  21. pcloseIntent));
  22. mMediaSession.setMetadata(
  23. new MediaMetadataCompat.Builder()
  24. .putString(MediaMetadata.METADATA_KEY_TITLE,"Song Title")
  25. .putString(MediaMetadata.METADATA_KEY_ARTIST,"Artist")
  26. .build());
  27. }
  28. else {
  29. ...
  30. }
英文:

Works for me : Should add "mMediaSession.setMetadata(..)" after setStyle(..)

  1. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  2. ...
  3. mBuilder.setStyle(new androidx.media.app.NotificationCompat.MediaStyle()
  4. .setMediaSession(mMediaSession.getSessionToken())
  5. .setShowCancelButton(true)
  6. .setShowActionsInCompactView(0, 1, 2)
  7. .setCancelButtonIntent(
  8. MediaButtonReceiver.buildMediaButtonPendingIntent(
  9. context, PlaybackStateCompat.ACTION_STOP)))
  10. .addAction(new NotificationCompat.Action(
  11. R.drawable.ic_noti_previous, "Previous",
  12. ppreviousIntent))
  13. .addAction(new NotificationCompat.Action(
  14. R.drawable.ic_noti_pause, "Pause",
  15. pplayIntent))
  16. .addAction(new NotificationCompat.Action(
  17. R.drawable.ic_noti_next, "Next",
  18. pnextIntent))
  19. .addAction(new NotificationCompat.Action(
  20. R.drawable.ic_noti_close, "Close",
  21. pcloseIntent));
  22. mMediaSession.setMetadata(
  23. new MediaMetadataCompat.Builder()
  24. .putString(MediaMetadata.METADATA_KEY_TITLE,"Song Title")
  25. .putString(MediaMetadata.METADATA_KEY_ARTIST,"Artist")
  26. .build());
  27. else
  28. {
  29. ...
  30. }

huangapple
  • 本文由 发表于 2020年9月28日 00:01:35
  • 转载请务必保留本文链接:https://go.coder-hub.com/64090494.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定