2013-04-30 50 views
4

我的应用程序允许从我的其他应用程序启动。我的任何活动都不显示状态栏。但是启动其他应用程序(如相机)时,用户可以访问status bar。因此,我尝试使用以下代码片段来折叠服务中的Status Bar(因此每次都会崩溃并且代码始终运行)。如何检测状态栏的扩展?

int currentapiVersion = android.os.Build.VERSION.SDK_INT; 
Object service = getSystemService("statusbar"); 
Class<?> statusbarManager = Class.forName("android.app.StatusBarManager"); 
Method collapse = null; 
if(currentapiVersion <= 16){ 
    collapse = statusbarManager.getMethod("collapse"); 
}else{ 
    collapse = statusbarManager.getMethod("collapsePanels"); 
} 
collapse.setAccessible(true); 
collapse.invoke(service); 

现在我要崩溃了status bar只有当用户试图展开this.Is有任何intentintent filter用于检测Status bar扩大存在吗?

由于提前

回答

4

没有任何形式的回调,通知栏被拖累Android上。

这是因为Android应用程序的设计意图是,通知栏出现和消失不会以任何方式影响功能。

+0

我已经'基于RemoteViews'通知,在打开的通知面板和向下滑动,我可以通知视图从'smallContentView'到'BigContentView'改变。但是当通知面板关闭(刷新)后,我希望我的通知返回到'SmallContentView'。可能吗? – dearvivekkumar 2016-03-15 15:53:18

+0

@dearvivekkumar如何检测打开通知面板并向下滑动? – 2016-07-27 07:27:01

8

在您的活动中,覆盖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(); 
     } 
    } 
} 
+0

我无法使用onWindowFocusChanged()。因为这只关注我的活动,而且我在问题中指定了可以从我的其他应用程序启动它。然后这不起作用。 – 2013-04-30 10:27:00

+0

如果您的窗口除了启动器以外还有其他一些活动,您可以折叠状态栏。您可以查询packagemanager并获取最高活动。如果顶级活动不是启动器,则必须折叠状态栏。 – 2013-05-02 04:07:06

+0

@LithithB我有'RemoteViews'基于通知,在打开通知面板并向下滑动时,我可以将通知视图从'smallContentView'更改为'BigContentView'。但是当通知面板关闭(刷新)后,我希望我的通知返回到'SmallContentView'。可能吗? – dearvivekkumar 2016-03-15 15:53:08