0

CyanogenMod/Lineage OS 具有通过双击状态栏来转动屏幕的功能。它只是关闭屏幕,而不是锁定设备。据我所知,这对于普通应用程序是不可能的。应用商店中的应用程序通过锁定设备来关闭设备。我浏览了 Lineage OS 的源代码,如果我理解正确的话,它似乎使用PowerManager.goToSleep().

我想创建一个应用程序来关闭屏幕,供我个人在运行 Lineage OS 的设备上使用。因为它是 Lineage OS,而不是普通的 ROM,所以我可以做更多的事情,比如获得 root 访问权限或刷机。

但是根据这个问题,第三方应用程序无法访问该方法。我创建了一个简单的项目并调用了该方法,但是当我尝试构建项目时,发生了“错误:找不到符号方法 goToSleep(int)”。

我可以使用 Android Studio 和官方 SDK 创建一个调用该方法的应用程序吗?如果没有,我该如何构建调用该方法的应用程序?

根据要求添加了代码:

public class MainActivity extends AppCompatActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
        pm.goToSleep(100);
    }
}

显现:

<manifest package="com.example.turnofftest"
      xmlns:android="http://schemas.android.com/apk/res/android">
    ....
    <uses-permission android:name="android.permissions.DEVICE_POWER" />
</manifest>

在阅读了“ApriOri”告诉的问题后,我知道我必须使用平台的证书签署应用程序,我可能可以这样做,因为 Lineage OS 是开源的。但首先,我需要构建它。

4

2 回答 2

0

您应该确保您的应用程序有权执行此操作。由于它是一个 Linage OS ROM,您可以轻松地将您的应用程序包含为可以访问 PowerManager API 的系统应用程序。

您提到的问题包括有关所需权限的一些评论。

这里有一个关于 PowerManager.goToSleep() 所需权限的具体问题。

于 2017-08-08T10:26:55.683 回答
0

用这个 :

PowerManager pManager=(PowerManager) getContext().getSystemService(Context.POWER_SERVICE);
try {
    pManager.getClass().getMethod("goToSleep", new Class[]{long.class}).invoke(pManager, SystemClock.uptimeMillis());
} catch (IllegalAccessException e) {
    e.printStackTrace();
} catch (InvocationTargetException e) {
    e.printStackTrace();
} catch (NoSuchMethodException e) {
    e.printStackTrace();
}

显现 :

成为系统 uid :

android:sharedUserId="android.uid.system"

添加权限:

<uses-permission android:name="android.permission.DEVICE_POWER"/>
于 2020-10-13T08:31:55.157 回答