展开通知栏Android Studio

时间:2019-01-15 11:38:48

标签: java android

我正在尝试在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()方法。

2 个答案:

答案 0 :(得分:1)

java.lang.NoSuchMethodException: expand []

此错误提示android.app.StatusBarManager类没有名称为expand的方法。您可以检查此类here的方法。

android.app.StatusBarManager拥有expandNotificationsPanel

  

展开通知面板。

然后在代码中,我们应该找到带有反射的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();
    }
}

答案 1 :(得分:0)

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