首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展Notification Studio

扩展Notification Studio
EN

Stack Overflow用户
提问于 2019-01-15 11:38:47
回答 2查看 1.4K关注 0票数 1

我正在尝试以编程方式在android中展开通知栏。我曾尝试使用下列程式码:

代码语言:javascript
复制
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();
    }
}

然而,这将返回

代码语言:javascript
复制
java.lang.NoSuchMethodException: expand []

我无法找到这方面的解决方案,因为该方法甚至不在官方API中。

任何帮助都是非常感谢的。谢谢。

编辑

到目前为止,我只在模拟器中尝试过这个方法。我会再次在这里张贴,如果我发现任何新的尝试时,真正的智能手机。

EDIT_v2:在实际设备上试用。但没有成功。我注意到的一件事是,没有向用户请求权限。即使我在检查它。

Android清单文件

代码语言:javascript
复制
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/>

请求许可

代码语言:javascript
复制
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();
        }
    }
}

GetPermission()方法仅在OnCreate函数中调用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-15 12:00:15

代码语言:javascript
复制
java.lang.NoSuchMethodException: expand []

这个错误说android.app.StatusBarManager类没有一个名为expand.you的方法可以检查这个类的这里方法。

android.app.StatusBarManagerexpandNotificationsPanel

展开“通知”面板。

然后,在代码中,我们应该找到带有反射的expandNotificationsPanel方法

代码语言:javascript
复制
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();
    }
}
票数 6
EN

Stack Overflow用户

发布于 2019-01-15 11:46:30

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54198094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档