Невозможно программно запустить заставку - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь запустить и остановить заставку из своего приложения. Ранее я использовал команду оболочки 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) 

Кто-нибудь знал, как программно запускать и останавливать заставку?

...