如何检测Notifications Panel是否已扩展?

时间:2015-10-22 09:43:40

标签: android reflection

我发现这种方式扩展了通知面板

Object sbservice = getSystemService("statusbar");
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(sbservice);

在查看源代码后,我还发现了collapsePanels方法来折叠通知

但我找不到任何方法来检测通知面板状态

因为我想检查它是打开还是关闭,然后决定我应该打开它还是关闭它

我怎么知道这个状态?

1 个答案:

答案 0 :(得分:0)

虽然已经很晚了,但可能会对某人有所帮助

请参阅this

您可以使用以下方法来检测通知面板拉动,

在清单文件中

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

在您的活动中覆盖onWindowFocusChanged()并编写 下面的代码。

这使用了权限

@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();
    }
} }