Заблокируйте экран устройства 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);