2013-05-04 3 views
0

저는 모든 MediaScanner Android 시스템과 구현 방법, 배터리 소모량, 도달 할 수없는 카드 등을 정말 좋아하지 않습니다. 그래서 디렉토리 기반 이미지 뷰어를 만들었습니다. 나는이와 콘솔에서 스캐너를 비활성화 (사용)하는 방법을 알고 :MediaScanner가 활성화되어 있는지 확인하는 방법?

su & pm disable (enable) com.android.providers.media/com.android.providers.media.MediaScannerReceiver 

지금, 내 시청자의 자바 코드에서이 작업을 수행 할 수. 물론 Runtime.getRuntime().exec(...)을 수행 할 수 있지만 질문이 있습니다.

1) Runtime.getRuntime().exec()없이이 작업을 수행 할 수 있습니까?

2) MediaScannerReceiver이 활성화 또는 비활성화되었는지 어떻게 알 수 있습니까? 나는 이것에 대한 인터넷 검색 및 anwser 찾을 수 없습니다. MediaScannerConnection이이를 제어하지 않는 것 같습니다. 사실, 나는 pm이 무엇인지 모릅니다 ...

3) 루트 액세스없이이 작업을 수행 할 수 있습니까?

감사합니다.

+0

오후는 powermanager입니다. – itsrajesh4uguys

답변

0

파트 2). 이것이 주요한 질문이었습니다. 해결책은 다음과 같습니다.

1 부). 방법은 다음과 같습니다

ComponentName sc = new ComponentName("com.android.providers.media", "com.android.providers.media.MediaScannerReceiver"); 
getPackageManager().setComponentEnabledSetting(sc, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0); 

문제는이 시스템 패키지이기 때문에이 (치명적인 오류 java.lang.SecurityException: Permission Denial: attempt to change component state from pid=23632, uid=10133, package uid=10081)를 작동하지 않는다는 것입니다. 이것은 3 부로 인한 것입니다 : 파트 3에 의한 것입니다 : 루트 액세스조차 필요하지 않습니다. 보안상의 이유로 API를 통해 Java 코드로 수행 할 수 없습니다. API는이를 허용하지 않습니다. 그래서 그것은 내게는 Runtime.getRuntime().exec("su & pm ...")이 유일한 방법이라고 생각합니다.