2017-08-08 66 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

相關問題