如何在我在Lineage OS上运行的应用程序中使用PowerManager.goToSleep()?



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是开源的。但首先,我需要构建它。

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

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

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

使用这个:

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"/>

最新更新