切换android中的通知栏

时间:2014-10-28 02:53:41

标签: android android-notifications

我知道我可以通过反思扩展通知栏

    Class<?> statusbarManager = Class.forName( "android.app.StatusBarManager" );
    Method showsb;
    if (Build.VERSION.SDK_INT >= 17) {
        showsb = statusbarManager.getMethod("expandNotificationsPanel");
    }
    else {
        showsb = statusbarManager.getMethod("expand");
    }
    showsb.invoke( getSystemService( "statusbar" ) );

但是,如果它已折叠,有没有办法展开它,如果它已经展开则会折叠它?

在android文档中有一个StatusBarManager的切换功能,但它对我不起作用。

EDITED

我从绑定服务中调用此函数。

2 个答案:

答案 0 :(得分:2)

我认为您可能缺少所需的权限。确保您的Manifest.xml中具有EXPAND_STATUS_BAR权限:

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

环顾四周,我找到了这段代码:

Object sbservice = getSystemService( "statusbar" );
Class<?> statusbarManager = Class.forName( "android.app.StatusBarManager" );
Method showsb = statusbarManager.getMethod( "expand" );
showsb.invoke( sbservice );

您可能想尝试一下。

编辑:

要实际检测它是否已关闭,请参阅this answer。这是它的样子:

使用以下代码覆盖活动中的onWindowFocusChanged()方法:

在权限中:

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

压倒一切:

@Override
public void onWindowFocusChanged(boolean hasFocus)
{
    try
    {
        if(!hasFocus)
        {
            Object service  = getSystemService("statusbar");
            Class<?> statusbarManager = Class.forName("android.app.StatusBarManager");
            Method collapse = statusbarManager.getMethod("collapse");
            collapse .setAccessible(true);
            collapse .invoke(service);
        }
    }
    catch(Exception ex)
    {
        if(!hasFocus)
        {
            try {
                Object service  = getSystemService("statusbar");
                Class<?> statusbarManager = Class.forName("android.app.StatusBarManager");
                Method collapse = statusbarManager.getMethod("collapse");
                collapse .setAccessible(true);
                collapse .invoke(service);

            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();                
            }
            ex.printStackTrace();
        }
    }
}

答案 1 :(得分:0)

以下代码适用于新旧Android操作系统。

您需要在EXPAND_STATUS_BAR中启用AndroidManifest.xml权限。

try {
    Object sbservice = getSystemService("statusbar");
    Class<?> statusbarManager = Class.forName("android.app.StatusBarManager");
    Method expandMethod;
    expandMethod = statusbarManager.getMethod(Build.VERSION.SDK_INT >= 17 ? "expandNotificationsPanel" : "expand");
    expandMethod.invoke(sbservice);
} catch (Exception ex) {
    ex.printStackTrace();
}