簡體   English   中英

單擊按鈕如何在android上顯示電源關閉菜單?

[英]How to show power off menu on android on the click of a button?

我要實現一項功能,在該功能上,單擊按鈕會出現android菜單,我們可以在長按電源按鈕的情況下看到該菜單,然后用戶可以選擇關閉設備。

我說的是這個菜單

在此處輸入圖片說明

我需要它沒有根。 商店中有一個無需root即可執行的應用程序。 https://play.google.com/store/apps/details?id=com.jjo.lockScreenButton

我可能遲到了,但是有可能。 為此,您必須使用可訪問性服務,用戶必須允許其訪問。 另外,請記住,可訪問性服務旨在幫助殘障人士,而不是針對此用例。

1.創建一個PowerMenuService

public class PowerMenuService extends AccessibilityService {

private BroadcastReceiver powerMenuReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if(!performGlobalAction(intent.getIntExtra("action", -1)))
            Toast.makeText(context, "Not supported", Toast.LENGTH_SHORT).show();
    }
};

@Override
public void onAccessibilityEvent(AccessibilityEvent event) {}

@Override
public void onInterrupt() {}

@Override
public void onCreate() {
    super.onCreate();

    LocalBroadcastManager.getInstance(this).registerReceiver(powerMenuReceiver, new IntentFilter("com.yourapp.ACCESSIBILITY_ACTION"));
}

@Override
public void onDestroy() {
    super.onDestroy();

    LocalBroadcastManager.getInstance(this).unregisterReceiver(powerMenuReceiver);
}
}

確保用您的應用程序包替換com.yourapp

2.在清單中注冊服務

<application>標記下添加以下內容:

 <service
        android:name=".PowerMenuService"
        android:enabled="true"
        android:exported="true"
        android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
        <intent-filter>
            <action android:name="android.accessibilityservice.AccessibilityService" />
        </intent-filter>
        <meta-data android:name="android.accessibilityservice"
            android:resource="@xml/accessibility_service" />
    </service>

3. accessibility_service.xml

在您的xml資源目錄中,創建一個名為accessibility_service.xml的文件,其中包含以下內容:

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:packageNames="com.yourapp" />

再次,替換com.yourapp 您還應該提供說明。 此處提供更多信息: https : //developer.android.com/guide/topics/ui/accessibility/services.html#service-config

4.顯示菜單

ComponentName component = new ComponentName(getApplicationContext(), PowerMenuService.class);
    getApplicationContext().getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
            PackageManager.DONT_KILL_APP);

    Intent intent = new Intent("com.yourapp.ACCESSIBILITY_ACTION");
    intent.putExtra("action", AccessibilityService.GLOBAL_ACTION_POWER_DIALOG);
    LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);

摘自: https : //github.com/farmerbb/Taskbar

你不可以做這個。

對話框本身是系統的一部分,並且不會以任何方式向應用程序開發人員公開。

您可以自己模擬對話框,但是該框架也不會公開以編程方式啟動關閉或重新啟動的方法。

如果您確實想沿這條路線走,還可能需要對應用程序具有root訪問權限,並使用這些選項關閉或重新啟動設備。

如果您的應用程序是標准的消費類應用程序,我建議讓他們使用其設備的標准接口關閉其設備。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM