Android应用开发笔记(5)

onNewIntent 调用时机

  1. 需要在清单文件中将启动Activity设置为单任务模式android:launchmode="singleTask"
  2. 在单任务模式下, 如果是首次创建Activity, 则可以通过getIntent获取传入的Intent, 如果Activity已被创建, 则onNewIntent方法会被调用. 也就是说首次创建不会调onNewIntent方法…

SystemUI显示fileprovider提供的封面图时崩溃

系统日志如下:

注意是SystemUI崩了, 所以只抓自己app的log是抓不到的

2025-06-21 02:51:34.819 2028-2079 HwNotifica...rServiceEx system_server W isBanNotification control information formats is invalid !
2025-06-21 02:51:34.819 28944-28976 AndroidRuntime com.android.systemui E FATAL EXCEPTION: SysUiBg
Process: com.android.systemui, PID: 28944
java.lang.SecurityException: Permission Denial: opening provider androidx.core.content.FileProvider from ProcessRecord{337d42a 28944:com.android.systemui/u0a74} (pid=28944, uid=10074) that is not exported from UID 10200
at android.os.Parcel.createExceptionOrNull(Parcel.java:2465)
at android.os.Parcel.createException(Parcel.java:2449)
at android.os.Parcel.readException(Parcel.java:2432)
at android.os.Parcel.readException(Parcel.java:2374)
at android.app.IActivityManager$Stub$Proxy.getContentProvider(IActivityManager.java:6242)
at android.app.ActivityThread.acquireProvider(ActivityThread.java:9150)
at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:3666)
at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:2630)
at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:2088)
at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:2042)
at android.graphics.ImageDecoder$ContentResolverSource.createImageDecoder(ImageDecoder.java:266)
at android.graphics.ImageDecoder.decodeBitmapImpl(ImageDecoder.java:1870)
at android.graphics.ImageDecoder.decodeBitmap(ImageDecoder.java:1863)
at com.android.systemui.media.MediaDataManager.m(Unknown Source:57)
at com.android.systemui.media.MediaDataManager.l(Unknown Source:31)
at com.android.systemui.media.MediaDataManager.p(Unknown Source:58)
at com.android.systemui.media.MediaDataManager.c(Unknown Source:0)
at com.android.systemui.media.MediaDataManager$c.run(Unknown Source:8)
at android.os.Handler.handleCallback(Handler.java:966)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:293)
at android.os.HandlerThread.run(HandlerThread.java:110)
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.am.ContentProviderHelper.checkAssociationAndPermissionLocked(ContentProviderHelper.java:716)
at com.android.server.am.ContentProviderHelper.getContentProviderImpl(ContentProviderHelper.java:270)
at com.android.server.am.ContentProviderHelper.getContentProvider(ContentProviderHelper.java:132)
at com.android.server.am.ActivityManagerService.getContentProvider(ActivityManagerService.java:7085)
at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:2611)
callee: null 2028/8702

是没给systemui授予uri读权限导致的, 详见:

https://github.com/rachel-ylcs/ylcs-kmp/issues/133

https://github.com/PaulWoitaschek/Voice/issues/1860

获取uri后给systemui权限就行, 示例代码如下:

/**
* These are necessary to grant the cover uri file permissions.
* systemui is related to this one:
* https://github.com/PaulWoitaschek/Voice/issues/1860
*
* The others are related to watch and car
* https://github.com/android/uamp/blob/2136c37bcef54da1ee350fd642fc61a744e86654/common/src/main/res/xml/allowed_media_browser_callers.xml
*/
listOf(
"com.android.systemui",
"com.google.android.autosimulator",
"com.google.android.carassistant",
"com.google.android.googlequicksearchbox",
"com.google.android.projection.gearhead",
"com.google.android.wearable.app",
).forEach { grantedPackage ->
application.grantUriPermission(
grantedPackage,
uri,
Intent.FLAG_GRANT_READ_URI_PERMISSION,
)
}

后续的有时间再补充

这玩意为啥能出到第五期的, 谁的问题
标题: Android应用开发笔记(5)
作者: QingChenW
链接: https://dawncraft.cc/2025/06/596/
本文遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 许可
禁止商用, 非商业转载请注明作者及来源!
上一篇
孔岱虞:终于来赴约了,我还以为你要行使大人的特权,说话不算话。
孔孝瑜:之前约好跟着风去远游,风吹到哪,我们就走到哪……好大的风,是风在催我们了吧?