簡體   English   中英

展開通知欄Android Studio

[英]Expanding Notification Bar Android Studio

我正在嘗試在android studio中以編程方式擴展通知欄 我嘗試使用以下代碼:-

private void ExpandNotificationBar(){
    if(ContextCompat.checkSelfPermission(this, Manifest.permission.EXPAND_STATUS_BAR) != PackageManager.PERMISSION_GRANTED)
        return;

    try{
        Object service = getSystemService("statusbar");
        Class<?> statusbarManager = Class.forName("android.app.StatusBarManager");
        Method expand = statusbarManager.getMethod("expand");
        expand.invoke(service);
    }
    catch (Exception e){
        Log.e("StatusBar", e.toString());
        Toast.makeText(getApplicationContext(), "Expansion Not Working", Toast.LENGTH_SHORT).show();
    }
}

但是,這返回

java.lang.NoSuchMethodException: expand []

我無法找到任何解決方案,因為該方法甚至不在官方API中。

任何幫助表示贊賞。 謝謝。

編輯
到目前為止,我只在模擬器中嘗試過該方法。 如果在實際的智能手機上嘗試發現任何新內容,我將再次在這里發布。

EDIT_v2 :在實際設備上嘗試過。 然而沒有成功。 我注意到的一件事是,沒有向用戶詢問權限。 即使我正在檢查它。

Android清單文件

<uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/>

請求許可

private void GetPermissions(){
    if(ContextCompat.checkSelfPermission(this, Manifest.permission.EXPAND_STATUS_BAR) != PackageManager.PERMISSION_GRANTED){
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.EXPAND_STATUS_BAR}, 1);
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    switch (requestCode){
        case 1: {
            if(grantResults.length == 0 || grantResults[0] != PackageManager.PERMISSION_GRANTED)
                Toast.makeText(getApplicationContext(), "Permission Denied", Toast.LENGTH_SHORT).show();
        }
    }
}

僅在OnCreate函數中調用GetPermission()方法。

java.lang.NoSuchMethodException: expand []

錯誤提示android.app.StatusBarManager類沒有名稱為expand的方法。您可以在此處檢查此類的方法。

android.app.StatusBarManagerexpandNotificationsPanel

展開通知面板。

然后在代碼中,我們應該找到帶有反射的expandNotificationsPanel方法

private void ExpandNotificationBar(){
    if(ContextCompat.checkSelfPermission(this, Manifest.permission.EXPAND_STATUS_BAR) != PackageManager.PERMISSION_GRANTED)
        return;

    try{
        Object service = getSystemService("statusbar");
        Class<?> statusbarManager = Class.forName("android.app.StatusBarManager");
        Method expand = statusbarManager.getMethod("expandNotificationsPanel"); //<-
        expand.invoke(service);
    }
    catch (Exception e){
        Log.e("StatusBar", e.toString());
        Toast.makeText(getApplicationContext(), "Expansion Not Working", Toast.LENGTH_SHORT).show();
    }
}

需要添加所需的權限,即:“ android.permission.EXPAND_STATUS_BAR”

暫無
暫無

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

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