在没有任何明显原因的情况下,搭载 Android 11 的小米手机开始出现在 crashlytics 日志中。通知发生了一些事情。我们不会做任何太具体的事情,并且在其他 Android 11 设备上一切正常。我无法在受影响的设备上重现此崩溃。可能是什么原因?
第一次崩溃开始出现在 12 月初,并且到 1 月份,数量从每天 10 起迅速增长到 100+
碰撞:
Fatal Exception: android.app.RemoteServiceException
Bad notification(tag=null, id=) posted from package my.application, crashing app(uid=, pid=): Couldn't inflate contentViewsjava.lang.ClassCastException: android.app.Notification$MediaStyle cannot be cast to android.app.Notification$MessagingStyle
Run Code Online (Sandbox Code Playgroud)
通知样式:
final MediaStyle style = new MediaStyle()
.setMediaSession(token)
.setShowActionsInCompactView(PREV_POSITION, PLAY_PAUSE_POSITION, NEXT_POSITION)
.setCancelButtonIntent(STOP.notificationPending(mContext))
.setShowCancelButton(true);
setStyle(style);
Run Code Online (Sandbox Code Playgroud) android android-notifications android-mediaplayer xiaomi android-notification.mediastyle
我正在尝试在音频 Android 应用程序中使用 MediaStyle 通知,如音频应用程序文档和媒体样式文档中所述。我能够成功地显示具有功能传输控制的通知,因此我相信我的实施是合理的。但是,当我按照建议设置androidx.media.app.NotificationCompat.MediaStylevia时,它似乎忽略了该标志的任何使用。根据源代码确保“通知不能被忽略”。当没有设置媒体样式时,我会遇到所描述的行为,但当我使用..setStyle()NotificationCompat.Builder.setOngoing()setOngoing.setStyle()
我想知道是否有人知道解决方法,或者是否有一些未记录的要求,我需要安抚以使用.setOngoing()媒体样式通知。我的编译 SDK 版本、目标 SDK 版本和最小 SDK 版本都是 30。如果有任何其他代码有用,请告诉我;我相信我正在提供相关的内容。
为了说明这种困境,我提供了一些屏幕截图,显示了应用媒体样式时通知如何可消除,而未应用媒体样式时通知如何不可消除。
依赖项(全部是最新的):
val appCompatVersion: String = "1.4.0-alpha01"
val mediaVersion: String = "1.4.0-alpha01"
val media2Version: String = "1.0.0-alpha04"
implementation("androidx.appcompat:appcompat:$appCompatVersion")
implementation("androidx.media:media:$mediaVersion")
implementation("androidx.media2:media2:$media2Version")
Run Code Online (Sandbox Code Playgroud)
private val notification: Notification?
get() {
val controller: MediaControllerCompat = mediaSession.controller ?: return null
val description: MediaDescriptionCompat = controller.metadata?.description ?: return null
val notificationManager: NotificationManager = notificationManager ?: return null
val notificationChannel …Run Code Online (Sandbox Code Playgroud) android android-notifications kotlin androidx android-notification.mediastyle
我有一个带有 Youtube IFrame API 的 angular 应用程序。当网站/pwa 在安卓设备上使用,并且正在播放 Youtube 视频时,应用程序会自动在 android 通知托盘中创建一个通知,让您查看当前正在播放的视频。
我创建了自己的播放列表控制器,所以我没有使用 queueVideoById,因为我不喜欢默认的 youtube-iframe 播放列表控制器的工作方式(之后您无法删除排队的视频)。
从我的 AppComponent 我正在加载 YouTube IFrame API
app.component.ts
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit, OnDestroy {
constructor(private youtubeHelper: YoutubeHelper) {
this.youtubeHelper.loadApi().then((isLoaded) => {
this.player.playSong(song.playerInfo.id);
});
}
@ViewChild('player') player: YoutubePlayerComponent;
}
Run Code Online (Sandbox Code Playgroud)
应用程序组件.html
<body>
<youtube-player #player [domId]="'player'" ... (previousPressed)="onPreviousPressed()" (nextPressed)="onNextPressed()"></youtube-player>
</body>
Run Code Online (Sandbox Code Playgroud)
此帮助程序用于加载 IFrame API 脚本。LoadApi 插入一个 src 设置为 youtube-iframe-url 的脚本标签:
import { Injectable } from '@angular/core';
import { Promise } …Run Code Online (Sandbox Code Playgroud) youtube-iframe-api android-mediasession android-notification.mediastyle
我有一个简单的 Android 应用程序,其中包含一个Activity和一个Service源自MediaBrowserServiceCompat. 我已成功将其设置为通过使用MediaBrowserCompat和播放我的主要活动中的音频MediaControllerCompat。它甚至可以播放和暂停蓝牙耳机的音频。都好。
我的挑战涉及NotificationCompat.MediaStyle锁定屏幕和通知托盘中显示的通知。通知正确显示。但是,当我使用addAction()和添加按钮时MediaButtonReceiver.buildMediaButtonPendingIntent,它们不会执行任何操作。如果我添加一个虚拟的 PendingIntent 来启动我的主要活动,那就可以了。
这是我生成通知的代码(抱歉,这是在 Xamarin 中运行的 C#,因此大小写和名称将与您预期的略有不同)。这是我的服务级别内的。
var builder = new NotificationCompat.Builder(this, CHANNEL_ID)
.SetVisibility(NotificationCompat.VisibilityPublic)
.SetSmallIcon(Resource.Drawable.ic_launcher)
.SetContentTitle("Title")
.SetContentText("Content")
.SetSubText("Subtext")
.SetLargeIcon(icon)
.SetColor(Android.Graphics.Color.DarkOrange)
.SetContentIntent(intent)
.SetDeleteIntent(MediaButtonReceiver.BuildMediaButtonPendingIntent(this, PlaybackStateCompat.ActionStop))
.AddAction(new NotificationCompat.Action(
Resource.Drawable.ic_pause, "Pause",
MediaButtonReceiver.BuildMediaButtonPendingIntent(this, PlaybackStateCompat.ActionPause)))
.SetStyle(new Android.Support.V4.Media.App.NotificationCompat.MediaStyle()
.SetShowActionsInCompactView(0)
.SetMediaSession(this.mediaSession.SessionToken)
.SetShowCancelButton(true)
.SetCancelButtonIntent(MediaButtonReceiver.BuildMediaButtonPendingIntent(this, PlaybackStateCompat.ActionStop))
);
this.StartForeground(NOTIFICATION_ID, builder.Build());
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经看到了以下内容来尝试解决此问题:
MediaSession.setActive(true)PlaybackStateCompatMediaButtonReceiverandroid.intent.action.MEDIA_BUTTON*Compat我知道媒体按钮事件已正确路由到我的应用程序,因为我的蓝牙耳机按钮可以工作。我在我的车上尝试过,它也在那里工作。只是通知中的按钮不起作用。我期望他们生成对MediaSessionCompat.Callback. 这是不正确的吗?我在这里做错了什么? …
android android-mediasession mediabrowserservicecompat android-notification.mediastyle
Android Q 及更高版本提供了在通知中包含可查找进度条的功能。我正在创建一个从外部存储播放音频文件的应用程序。
我想实现如图所示的进度条。
问题是我已经实现了一个进度条,它是可搜索的,但当用户搜索到搜索栏上的特定位置时,它不会更新媒体播放器。
代码
以下代码设置元数据
mediaSession.setMetadata(MediaMetadataCompat.fromMediaMetadata(new MediaMetadata.Builder().putString(MediaMetadata.METADATA_KEY_TITLE, title) .putLong(MediaMetadata.METADATA_KEY_DURATION, Long.parseLong(listSongs.get(position).getmDuration())).build()));
以下代码检查媒体播放器是否正在播放并设置 PlaybackState
if(mediaPlayer!=null) {
if(!mediaPlayer.isPlaying()){
playbackState = PlaybackState.STATE_PLAYING;
}
else{
playbackState = PlaybackState.STATE_PAUSED;
}
mBuilder = new PlaybackState.Builder()
.setState(playbackState
, musicService.getCurrentPosition()
, 1
)
.setActions(PlaybackState.ACTION_SEEK_TO|
PlaybackState.ACTION_PAUSE |
PlaybackState.ACTION_SKIP_TO_NEXT |
PlaybackState.ACTION_SKIP_TO_PREVIOUS |
PlaybackState.ACTION_PLAY_PAUSE)
;
mediaSession.setPlaybackState(PlaybackStateCompat.fromPlaybackState(mBuilder.build()));
mediaSession.setActive(true);
Run Code Online (Sandbox Code Playgroud) spotify android-mediaplayer exoplayer android-10.0 android-notification.mediastyle
我的自定义媒体样式通知不再适用于我的音乐应用的 Android 11。它在 Android 10 和以前的版本中运行良好。
是否需要添加任何其他代码才能在 Android 11 中运行。
我应该补充一点,摆脱“ .setMediaSession(mediaSessionCompat.getSessionToken())) ”行会给我一个通知,但它不是具有完整背景颜色的奥利奥通知等。
这是我创建通知的代码:
public static final String CHANNEL_ID = "Channel1";
//public static final String ACTION_PREVIOUS = "actionprevious";
public static final String ACTION_PLAY = "actionplay";
public static final String ACTION_EXIT = "actionexit";
//public static final String ACTION_NEXT = "actionnext";
public static Notification notification;
public static void createNotification(Context context, Track track, int playbutton, int exitApp, int pos, int size) {
if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.O) {
NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(context);
MediaSessionCompat mediaSessionCompat = …Run Code Online (Sandbox Code Playgroud) android-notification.mediastyle ×6
android ×3
android-10.0 ×1
android-11 ×1
androidx ×1
exoplayer ×1
java ×1
kotlin ×1
spotify ×1
xiaomi ×1