2012-07-04 1 views
4

, 유일한 해결책이 멋지고 작동이StatusBarManager 클래스에 대한 참조를 직접 찾을 수없는 이유는 무엇입니까? 동적으로 안드로이드의 알림 영역을 아래로 드래그하려면

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

이지만, 왜 반사와 불결함? StatusBarManager 클래스에 대한 참조를 직접 찾을 수없는 이유는 무엇입니까? 왜 "상태 표시 줄"서비스에 대한 컨텍스트 클래스에 상수가 없습니까?

답변

12

반사 왜곡?

Android SDK의 일부가 아니기 때문에 신뢰할 수없는 앱을 만드는 데 관심이있는 사용자 만 Android 소스 코드 외부의 StatusBarManager과 상호 작용하려고합니다. 핵심 Android 팀 및 기기 제조업체는 원할 때 언제든지 SDK 외부의 항목을 변경할 수 있기 때문에 가능합니다.

왜 StatusBarManager 클래스에 대한 참조를 직접 찾을 수 없습니까?

Android SDK의 일부가 아니기 때문에 @hide 주석으로 표시됩니다 안드로이드 프레임 워크 클래스에서 아주 많은 클래스와 메소드는 모든 종류의 이유를 들어, 다음과 같습니다 내키지는 "무명하여 보안"을 무기한 API를 지원하기 위해 커밋 등

왜 "상태 표시 줄"서비스의 컨텍스트 클래스에 상수가 있습니까?

Android SDK의 일부가 아니기 때문에 StatusBarManager을 다른 시스템 서비스 (예 : LocationManager, NotificationManager)와 동일한 상태로 "승격"하도록 AOSP에 패치를 제공 할 수 있습니다. ~ 012에서 SDK를 만든 후 StatusBarManager 상황이 단순히 감독 일 뿐인 경우 패치가 제대로 수락되어 곧 출시 될 Android 버전에서 변경 사항을 확인할 수 있습니다.