2013-05-08 2 views
1

내 넥서스 4는, 내 코드입니다 :나는 상태 표시 줄을 확장 할 수있는 것은 아무 나는 안드로이드 4.2 상태 표시없이 내 넥서스 4를 확장 할 수 있지만, 다른 수준의 확인을 실행 안드로이드 4.2

public void OpenNotify() { 
    // TODO Auto-generated method stub 
    int currentApiVersion = android.os.Build.VERSION.SDK_INT; 
    try { 
     Object service = getSystemService("statusbar"); 
     Class<?> statusbarManager = Class.forName("android.app.StatusBarManager"); 

     if (service != null) { 
      /*Method expand = service.getClass()statusbarManager.getMethod("expand"); 
      expand.invoke(service);*/ 
      if (currentApiVersion <= 16) { 
       Method collapse = statusbarManager.getMethod("collapse"); 
       collapse.setAccessible(true); 
       collapse.invoke(service); 
      } else { 
       Method collapse2 = statusbarManager.getMethod("collapsePanels"); 
       collapse2.setAccessible(true); 
       collapse2.invoke(service); 
      } 
     } 

    } catch (Exception e) { 
    } 


} 

그리고

어떻게하면됩니까? 여기

+0

매니페스트 파일에 'android.permission.EXPAND_STATUS_BAR'을 (를) 요청 했습니까? – aragaer

+0

네. 매니 페스트 파일에 user2309540

답변

0

내가 그것을하고있어 방법과 실제로 작동합니다

private static final String collapse_method = Build.VERSION.SDK_INT > 16 
    ? "collapsePanels" 
    : "collapse"; 
try { 
    Object obj = context.getSystemService("statusbar"); 
    Class.forName("android.app.StatusBarManager") 
      .getMethod(collapse_method, new Class[0]) 
      .invoke(obj, (Object[]) null); 
} catch (Exception e) { 
    Log.e("STATUSBAR", "Failed to collapse status panel: "+e); 
    // do nothing, it's OK 
} 

당신은 (그것이 가능의 경우와 같이) 발생 된 정확히 예외를 확인하고 정확한 이유를 파악해야한다.

+0

이렇게하면 상태 표시 줄을 확장하거나 상태 표시 줄을 축소하려고합니까? 나는 내가 실수를한다고 생각해. 나는 그것을 확장하고 싶다. 그들 사이에 약간 다른 점이있다. 그리고 어떻게 할 수 있는가? 나는 당신의 코드를 돌렸다. 그것은 나에게 효과가 없다. – user2309540

+0

지금 Nexus 4에서 Android 4.2를 실행하기 때문에 이상합니다. 로그에서 무엇을 볼 수 있습니까? 어떤 예외가 발생합니까? – aragaer

+0

아니요,하지만이 문제를 해결했습니다. 대단히 감사합니다! – user2309540

2
public void OpenNotify() { 
    // TODO Auto-generated method stub 
    int currentApiVersion = android.os.Build.VERSION.SDK_INT; 
    try { 
     Object service = getSystemService("statusbar"); 
     Class<?> statusbarManager = Class 
       .forName("android.app.StatusBarManager"); 
     Method expand = null; 
     if (service != null) { 
      if (currentApiVersion <= 16) { 
       expand = statusbarManager.getMethod("expand"); 
      } else { 
       expand = statusbarManager 
         .getMethod("expandNotificationsPanel"); 
      } 
      expand.setAccessible(true); 
      expand.invoke(service); 
     } 

    } catch (Exception e) { 
    } 

} 

이렇게하면 정상적으로 실행됩니다.