随着应用程序implementation 'com.android.support:appcompat-v7:26.+'
在implementation 'com.android.support:appcompat-v7:28.+'
我的模拟器上使用 API 28 转换,应用程序在调用该方法时关闭并出现致命错误:WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);
如果将 Gradle 更改回com.android.support:appcompat-v7:28.+'
26+,则不会发生错误
如何更改代码以在 Android 9 设备上运行?日志猫:
FATAL EXCEPTION: main
Process: com.admin.xgame, PID: 23428
java.lang.RuntimeException: Unable to resume activity {com.admin.xgame/com.admin.xgame.MainActivity}: java.lang.SecurityException: read wallpaper: Neither user 10069 nor current process has android.permission.READ_EXTERNAL_STORAGE.
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3784)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3816)
at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:51)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:145)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.SecurityException: read wallpaper: Neither user 10069 nor current process has android.permission.READ_EXTERNAL_STORAGE.
at android.os.Parcel.createException(Parcel.java:1942)
at android.os.Parcel.readException(Parcel.java:1910)
at android.os.Parcel.readException(Parcel.java:1860)
at android.app.IWallpaperManager$Stub$Proxy.getWallpaper(IWallpaperManager.java:495)
at android.app.WallpaperManager$Globals.getCurrentWallpaperLocked(WallpaperManager.java:457)
at android.app.WallpaperManager$Globals.peekWallpaperBitmap(WallpaperManager.java:411)
at android.app.WallpaperManager$Globals.peekWallpaperBitmap(WallpaperManager.java:388)
at android.app.WallpaperManager.getFastDrawable(WallpaperManager.java:795)
**at com.admin.xgame.MainActivity.onResume(MainActivity.java:2479)**
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1412)
at android.app.Activity.performResume(Activity.java:7292)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3776)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3816)
at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:51)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:145)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: android.os.RemoteException: Remote stack trace:
at android.app.ContextImpl.enforce(ContextImpl.java:1812)
at android.app.ContextImpl.enforceCallingOrSelfPermission(ContextImpl.java:1840)
at com.android.server.wallpaper.WallpaperManagerService.enforceCallingOrSelfPermissionAndAppOp(WallpaperManagerService.java:1800)
at com.android.server.wallpaper.WallpaperManagerService.getWallpaper(WallpaperManagerService.java:1818)
at android.app.IWallpaperManager$Stub.onTransact(IWallpaperManager.java:134)
由于您没有提供清单文件或包含问题行的方法,我只能推测。
从 API 27 开始
WallpaperManager
,需要许可READ_EXTERNAL_STORAGE
。因此,您需要添加一行
Manifest
:在方法中,在调用之前
WallpaperManager wallpaperManager = WallpaperManager.getInstance(this)
,需要检查是否有所需的权限: