2013-04-30 53 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