2

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

这是我的代码

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

3 回答 3

1

反问:如果普通应用程序可以锁定你的屏幕,它有什么用?在我看来,那是恶意软件。你需要许可,没有什么能改变它。唯一的解决方案是删除这个“功能”。

编辑:顺便说一下更多信息:Android 调用 PowerManager.goToSleep(n) 需要哪些权限将设备置于睡眠模式?

于 2014-08-26T14:08:56.510 回答
0

出于某种原因,这种事情在 Android 中很难做到。您正试图阻止对主操作系统的访问,这是一件坏事。正如其他人所提到的,这可能会被用于恶意目的(认为有人可以创建一个勒索软件应用程序来阻止您的设备,直到您支付某些费用来发布它,这并不是一件容易的事)。

所以底线 - 你不能做你所要求的(并且有充分的理由)。特别是在非root手机上。一个设备被植根,你可以做任何事情(包括阻止访问系统按钮)。

有关此的更多详细信息,请查看“信息亭”模式,或阻止系统访问(有很多关于此的 SO 问题)。

于 2014-08-26T14:22:49.110 回答
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);
于 2014-08-26T14:26:52.913 回答