Я пытаюсь запустить и остановить заставку из своего приложения. Ранее я использовал команду оболочки adb, чтобы сделать это с помощью su. Для включения:
settings put secure screensaver_components com.android.deskclock/com.android.deskclock.Screensaver", "settings put secure screensaver_enabled 1"
Для отключения:
settings put secure screensaver_enabled 0
Я обновил android устройство и больше не имею права su на этом устройстве, поэтому хочу сделать это программно сейчас. Чтобы запустить службу скринсейвера, я делаю так:
Intent intentDream = new Intent(Intent.ACTION_MAIN);
intentDream.setClassName("com.android.deskclock", "com.android.deskclock.Screensaver");
startService(intentDream);
также устанавливаю разрешение в файле манифеста:
<uses-permission android:name="android.permission.BIND_DREAM_SERVICE"/>
, но все равно получаю исключение на консоли:
2020-01-16 13:10:49.753 28874-28874/com.hospitality.hp.patientmode E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.hospitality.hp.patientmode, PID: 28874
java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.SCREEN_OFF flg=0x50200010 } in com.hospitality.hp.patientmode.MainActivity$7@f09e4ac
at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0(LoadedApk.java:1401)
at android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run(Unknown Source:2)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6758)
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: Not allowed to start service Intent { act=android.intent.action.MAIN cmp=com.android.deskclock/.Screensaver } without permission android.permission.BIND_DREAM_SERVICE
at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1570)
at android.app.ContextImpl.startService(ContextImpl.java:1532)
at android.content.ContextWrapper.startService(ContextWrapper.java:664)
at com.hospitality.hp.patientmode.MainActivity$7.onReceive(MainActivity.java:244)
at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0(LoadedApk.java:1391)
at android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run(Unknown Source:2)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6758)
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)
Кто-нибудь знал, как программно запускать и останавливать заставку?