- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的应用中使用了 MediaStyle 通知。它在 Android 11 之前一直运行良好。在 Android 11 上,它使 Android UI 崩溃(不仅是应用程序,它还破坏了 Android 的 UI)。
app上的logcat没有报错,但是Android本身有报错。
fun buildNotificationAsync(sessionToken: MediaSessionCompat.Token): Deferred<Notification> = GlobalScope.async {
if (shouldCreateNowPlayingChannel()) {
createNowPlayingChannel()
}
val controller = MediaControllerCompat(context, sessionToken)
val description = controller.metadata.description
val playbackState = controller.playbackState
val builder = NotificationCompat.Builder(context, NOW_PLAYING_CHANNEL)
// Only add actions for skip back, play/pause, skip forward, based on what's enabled.
var playPauseIndex = 0
if (playbackState.isSkipToPreviousEnabled) {
builder.addAction(skipToPreviousAction)
++playPauseIndex
}
if (playbackState.isRewindEnabled) {
builder.addAction(rewindAction)
++playPauseIndex
}
if (playbackState.isPlaying) {
builder.addAction(pauseAction)
} else if (playbackState.isPlayEnabled) {
builder.addAction(playAction)
}
if (playbackState.isFastForwardEnabled) {
builder.addAction(fastForwardAction)
}
if (playbackState.isSkipToNextEnabled) {
builder.addAction(skipToNextAction)
}
val isHuaweiLollipop = (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP_MR1 ||
Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP) &&
Build.MANUFACTURER.toLowerCase(Locale.getDefault()).contains("huawei")
if (!isHuaweiLollipop) {
val mediaStyle = MediaStyle()
.setCancelButtonIntent(stopPendingIntent)
.setMediaSession(sessionToken)
.setShowActionsInCompactView(playPauseIndex)
.setShowCancelButton(true)
builder.setStyle(mediaStyle)
}
description.iconUri?.let { uri ->
val largeIcon = CoverCache.getInstance().fetchLargeIfNecessary(context, uri)
largeIcon?.let { icon -> builder.setLargeIcon(icon) }
}
return@async builder.setContentIntent(controller.sessionActivity)
.setContentText(description.subtitle)
.setContentTitle(description.title)
.setDeleteIntent(stopPendingIntent)
.setOnlyAlertOnce(true)
.setSmallIcon(R.drawable.ic_stat)
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.build()
}
我看到这个异常,我认为是相关的:
AndroidRuntime E FATAL EXCEPTION: SysUiBg
E Process: com.android.systemui, PID: 26311
E java.lang.SecurityException: Permission Denial: opening provider androidx.core.content.FileProvider from ProcessRecord{410d665 26311:com.android.systemui/u0a141} (pid=26311, uid=10141) that is not exported from UID 10151
E at android.os.Parcel.createExceptionOrNull(Parcel.java:2373)
E at android.os.Parcel.createException(Parcel.java:2357)
E at android.os.Parcel.readException(Parcel.java:2340)
E at android.os.Parcel.readException(Parcel.java:2282)
E at android.app.IActivityManager$Stub$Proxy.getContentProvider(IActivityManager.java:5702)
E at android.app.ActivityThread.acquireProvider(ActivityThread.java:6813)
E at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2930)
E at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:2481)
E at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1967)
E at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1921)
E at android.graphics.ImageDecoder$ContentResolverSource.createImageDecoder(ImageDecoder.java:274)
E at android.graphics.ImageDecoder.decodeBitmapImpl(ImageDecoder.java:1862)
E at android.graphics.ImageDecoder.decodeBitmap(ImageDecoder.java:1855)
E at com.android.systemui.media.MediaDataManager.loadBitmapFromUri(MediaDataManager.kt:462)
E at com.android.systemui.media.MediaDataManager.loadBitmapFromUri(MediaDataManager.kt:433)
E at com.android.systemui.media.MediaDataManager.loadMediaDataInBg(MediaDataManager.kt:331)
E at com.android.systemui.media.MediaDataManager.access$loadMediaDataInBg(MediaDataManager.kt:89)
E at com.android.systemui.media.MediaDataManager$loadMediaData$1.run(MediaDataManager.kt:241)
E at android.os.Handler.handleCallback(Handler.java:938)
E at android.os.Handler.dispatchMessage(Handler.java:99)
E at android.os.Looper.loop(Looper.java:223)
E at android.os.HandlerThread.run(HandlerThread.java:67)
E Caused by: android.os.RemoteException: Remote stack trace:
E at com.android.server.am.ActivityManagerService.getContentProviderImpl(ActivityManagerService.java:7155)
E at com.android.server.am.ActivityManagerService.getContentProvider(ActivityManagerService.java:7594)
E at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:2381)
E at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2883)
E at android.os.Binder.execTransactInternal(Binder.java:1159)
如果我删除设置小图标的构建器行,它可以正常工作(但这会使通知只是一个没有媒体样式的普通通知)。您会注意到异常是关于缺少从文件提供者获取内容的权限,但通知中没有任何内容使用类似的内容。
最佳答案
我发现了问题。由于这是一个 MediaStyle,我们设置了 MediaSession,该 session 可以访问 MediaMetadataCompat 项。为了构建这些项目,我们有:
val builder = MediaMetadataCompat.Builder()
.putString(MediaMetadataCompat.METADATA_KEY_TITLE, doc.title)
.putString(MediaMetadataCompat.METADATA_KEY_AUTHOR, doc.author ?: "Unknown")
.putString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID, doc.documentId)
.putString(MediaMetadataCompat.METADATA_KEY_ALBUM, folders.firstOrNull { it.folderId == doc.folderId }?.folderName)
.putString(MediaMetadataCompat.METADATA_KEY_GENRE, sourceType?.name ?: "Unknown") // We don't have Genre info, we'll use for the sourceType
.putLong(METADATA_KEY_UAMP_FLAGS, MediaBrowserCompat.MediaItem.FLAG_PLAYABLE.toLong())
if (originalDocumentType != null) {
// We don't have a disc no, so
builder.putLong(MediaMetadataCompat.METADATA_KEY_DISC_NUMBER, originalDocumentType.ordinal.toLong())
}
// we'll use it doc type.
if (icon != null) {
builder.putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON_URI, icon.toString())
}
这是设置图标 uri 的最后一行。那需要许可。将其添加到该行的正上方
context.grantUriPermission("com.android.systemui", icon, Intent.FLAG_GRANT_READ_URI_PERMISSION)
现在应用程序可以正常运行。但由于缺少权限而导致 Android UI 崩溃的事实仍然是一个错误。我预计不会显示图标甚至使应用程序崩溃,但肯定不会使 Android 本身崩溃。
关于Android 11 MediaStyle 通知崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64186578/
我有一个应用程序应该在应用程序处于前台和后台(不在历史记录中)时显示提醒通知。 在前景情况下,我通过以下方法实现了这一点。 PendingIntent pendingIntent = PendingI
如何为我的 WPF 应用程序创建通知,例如浏览器上的通知,它们通过浏览器顶部的“工具栏”显示消息或通过在右下角向上/向下滑动的弹出窗口显示“MSN”样式通知屏幕。也许在应用程序中心淡入/淡出的面板可以
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
我正在使用 Redis 作为分布式缓存。我有不同的应用程序,它们只听特定的键。例如:App1 听 App1.*App2 监听 App2.* 等等。 我的应用程序使用以下模式接收通知:App1:“ ke
我正在尝试构建一个基于官方节点 docker 镜像的 docker 镜像,我想知道是否有某种方法可以在推送新版本的官方节点镜像时自动重建镜像。这样我的图像就不会基于过时的基础图像。 也许有类似 rss
我在一个项目中工作,我需要在添加或修改文件时在数据库中记录文件信息,以便它们保持同步。这些文件应该存储在 Nextcloud 服务器中,那么 Nextcloud 是否有办法通知这些更改(例如 webh
通知类中的方法via 如何根据用户的偏好动态变化,一个用户可能想通过电子邮件接收,而另一个用户则不想 public function via($notifiable) { return ['d
我有一个应用程序,我正在发送推送通知,如果用户登录到应用程序,这很好 - 但是,如果他们没有/如果他们没有在 X 分钟内阅读通知,我想给他们发送一封电子邮件. 我要解决的方法是使用 Laravel N
我正在使用 Django 的 contrib.comments 并想了解以下内容。 是否有任何实用程序或应用程序可以插入到某个应用程序中,当对某个项目发表评论时向您发送通知? 我并没有真正使用过那么多
我希望用户在启动应用程序之前接受协议(protocol)。所以在 appDelegate.m 中我有以下内容: - (BOOL)application:(UIApplication *)applica
我正在创建一个新指令,我想知道如何在 angular 从 DOM 中删除元素时收到通知。 我的目标是在删除元素时添加 jquery 动画。 最佳答案 如果您尝试对元素的移除进行动画处理,则需要在移除元
我正在编写一个应用程序,其工作方式与Apple的Weather.app非常相似:底部有一个UIPageControl,屏幕中间有一个UIScrollView。在我的代码中,我实现了 - (void)s
如何查明 iPhone 注册了哪些通知? 例如: notify_post("com.apple.springboard/Prefs"); 最佳答案 虽然这个问题的答案已经得到确认,但由于 @Nate
我的 Cocoa 应用程序中有一个 TextField。该文本字段有时会被填充,有时会为空。 我希望当字段为空时按钮被禁用。现在,每当我对 Core Data 执行某些操作时,我都会检查该字段,Tex
我的应用程序在其数据库中包含文档。用户可以打开文档,在这种情况下,文档将保存到临时文件夹并在用户计算机上打开。 我希望在这些临时文件之一发生更改时收到通知,并让用户将更改后的文档保存回数据库。 在 D
我目前正在开发一个网络应用程序,它不断对 php 进行 ajax 调用(轮询),以从数据库中提取新的“任务”,有点像 gmail/facebook 检查新电子邮件和消息的方式。当前的 JavaScri
我正在尝试让通知适用于我使用 Angular 5 和 Electron 制作的 Electron 应用程序。到目前为止,我的 index.html 文件中有以下代码: function doNo
我有一个录音/播放应用程序。它在后台运行。当它进入后台时,如果任何其他音频应用程序打开或开始使用音频资源,我想适本地处理我的应用程序。 iOS 提供了一种发送此类通知的方法,如在 ipod 播放器中看
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
是否有 Subversion 的工具可以在对某些文件提交更改时自动通知我? 最佳答案 您可以创建一个 post-commit hook script “ Hook ”提交。 在钩子(Hook)脚本中,
我是一名优秀的程序员,十分优秀!