锁定Android设备屏幕并阻止用户解锁

时间:2014-08-26 13:52:42

标签: android lockscreen android-powermanager

我在Android App中工作,应该阻止用户在某些情况下使用手机。 所以我试图锁定屏幕 我使用了PowerManger goToSleeo()方法 但它需要DEVICE_POWER权限。这仅适用于系统应用程序,但我的应用程序不是系统应用程序 我该怎么办?

这是我的代码

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

3 个答案:

答案 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);