2017-08-08 155 views
0

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

我想创建一个应用程序来关闭屏幕,以供我在运行Lineage操作系统的设备上使用。由于它是Lineage操作系统,而不是库存ROM,我可以做更多的事情,比如获取root访问权限或刷新某些内容。

但根据this question,该方法不能被第三方应用程序访问。我创建了一个简单的项目并调用了该方法,但是当我尝试构建项目时,发生了“错误:无法找到符号方法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> 

阅读问题后“先验”说,我知道我必须使用平台的证书,签署的应用程序,我可能可以做到,因为Lineage OS是开源的。但首先,我需要建立它。

+0

请发表您的代码 – ApriOri

+0

我已添加源代码。除上述部分外,其他所有部分均由Android Studio的“空白活动”项目生成。 –

回答

0

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

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

有关PowerManager.goToSleep()here所需权限的具体问题。

+0

我不相信添加权限会导致编译错误消失。它不会导致运行时错误缺少权限?我想这个方法可能会以某种方式隐藏在SDK中。 –

+0

你应该使用getSystemService来获取PowerManager。并强制转换PowerManager mgr =(PowerManager)context.getSystemService(Context.POWER_SERVICE); – ApriOri

相关问题