2013-05-04 3 views
0

Мне действительно не нравится вся система Android MediaScanner и как она реализована, потребление батареи, карта недоступна и т. Д., Поэтому я сделал просмотрщик изображений на основе каталогов. Я знаю, как отключить (включить) сканер из консоли с этим:Как узнать, включен ли MediaScanner?

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

Теперь я хочу, чтобы это сделать из кода Java моего зрителя. Конечно, я могу сделать Runtime.getRuntime().exec(...), но у меня есть некоторые вопросы:

1) Есть ли способ сделать это без Runtime.getRuntime().exec()?

2) Как я могу узнать, включен или отключен MediaScannerReceiver? Я Googled для этого, и я не мог найти anwser. MediaScannerConnection, похоже, не контролирует это. На самом деле, я не знаю, что pm делает ...

3) Возможно ли это сделать без доступа root?

Спасибо!

+0

pm является powermanager – itsrajesh4uguys

ответ

0

часть 2). Это был главный вопрос, и это решение:

ComponentName sc = new ComponentName("com.android.providers.media", "com.android.providers.media.MediaScannerReceiver"); 
    int isEnabled = getPackageManager().getComponentEnabledSetting(sc); 
    if (isEnabled == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) { ... } 

часть 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). Не требуется даже корневой доступ, он не может быть выполнен в Java-коде через API по соображениям безопасности: API просто не позволяет этого. Мне кажется, что Runtime.getRuntime().exec("su & pm ...") - единственный способ.

Смежные вопросы