Заблокируйте экран устройства Android и запретите пользователю разблокировать его.

Я работаю в приложении для Android, которое в некоторых случаях должно препятствовать использованию мобильного телефона пользователем. Поэтому я попытался заблокировать экран. Я использовал метод goToSleeo() PowerManger, но ему нужно разрешение DEVICE_POWER. что разрешено только для системных приложений, но мое приложение не является системным приложением, что мне делать?

вот мой код

 PowerManager  manager = (PowerManager) getSystemService(Context.POWER_SERVICE);
                 manager.goToSleep(600000);

3 ответа

Встречный вопрос: Какой цели он будет служить, если обычные приложения могут заблокировать ваш экран? На мой взгляд, это вредоносная программа. Вам нужно разрешение, и ничто не изменит этого. Единственное решение - удалить эту "функциональность".

Изменить: Кстати, немного больше информации: Android Какие разрешения требуются для вызова PowerManager.goToSleep(n) перевести устройство в спящий режим?

Подобные вещи сложно сделать в Android по причине. Вы пытаетесь заблокировать доступ к основной ОС, что плохо. Как уже упоминали другие люди, это может быть использовано в злонамеренных целях (не сложно подумать, что кто-то может создать приложение для вымогательства, которое блокирует ваше устройство, пока вы не заплатите что-нибудь за его выпуск).

Итак, суть - вы НЕ МОЖЕТЕ делать то, что вы просите (и по уважительным причинам). Особенно на некорневом телефоне. Если у вас есть root-права, вы МОЖЕТЕ сделать что угодно (включая блокировку доступа к системным кнопкам).

Для получения более подробной информации об этом, загляните в режим "Киоск" или заблокируйте доступ к системе (есть много SO вопросов по этому поводу).

Вы не хотите блокировать устройство, оно намеренно спроектировано против. Однако вы можете отключить сенсорный ввод, переопределив onTouchEvent,

Затем вам нужно создать представление, например, так:

<FrameLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"/>

             <your code here>

    <Disabletouch
        android:id="@+id/black_hole"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
</FrameLayout>

И определите это так:

public class DisableTouch extends View {
    private boolean touch_disabled=true;
    @Override
    public boolean onTouchEvent(MotionEvent e) {
        return touch_disabled;
    }
    public disable_touch(boolean b) {
        touch_disabled=b;
    }
}

Назовите это в действии:

(DisableTouch) black_hole = findViewById(R.id.black_hole);
black_hole.disable_touch(true);

И наоборот:

 black_hole.disable_touch(false);
Другие вопросы по тегам