我在Android App中工作,应该阻止用户在某些情况下使用手机。 所以我试图锁定屏幕 我使用了PowerManger goToSleeo()方法 但它需要DEVICE_POWER权限。这仅适用于系统应用程序,但我的应用程序不是系统应用程序 我该怎么办?
这是我的代码
PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE);
manager.goToSleep(600000);
答案 0 :(得分:1)
反问题:如果普通应用可以锁定您的屏幕,它会起什么作用?在我看来,这是恶意软件。你需要这个许可,没有什么能改变它。唯一的解决方案是删除这个"功能"。
编辑:顺便提一下其他信息:Android What permissions required to call PowerManager.goToSleep(n) put device in sleep mode?
答案 1 :(得分:0)
这种事情在Android中很难做到。您正试图阻止访问主操作系统,这是一件坏事。正如其他人所提到的,这可能被用于恶意目的(认为有人可以创建一个阻止你的设备的勒索软件应用程序,直到你付出一些东西来释放它)并不是一件容易的事。)
所以底线 - 你不能做你所要求的(并且有充分的理由)。特别是在非根电话上。一个设备已植根,您可以执行任何操作(包括阻止访问系统按钮)。
有关详细信息,请查看“Kiosk”模式或阻止系统访问(有很多关于此问题的SO)。
答案 2 :(得分:0)
您不想锁定设备,这是故意设计的。但是,您可以通过覆盖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);