onNewIntent 调用时机
- 需要在清单文件中将启动Activity设置为单任务模式
android:launchmode="singleTask"
- 在单任务模式下, 如果是首次创建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, ) }
后续的有时间再补充
这玩意为啥能出到第五期的, 谁的问题