2013-05-04 8 views
0

Je n'aime vraiment pas tout le système Android MediaScanner et sa mise en œuvre, la consommation de la batterie, carte non accessible, etc, donc je fait une visionneuse d'images à base de répertoire. Je sais comment désactiver (activer) le scanner à partir d'une console avec ceci:Comment savoir si MediaScanner est activé?

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

Maintenant, je veux le faire à partir du code java de mon lecteur. Bien sûr, je peux faire un Runtime.getRuntime().exec(...), mais j'ai quelques questions:

1) Est-il possible de le faire sans le Runtime.getRuntime().exec()?

2) Comment puis-je savoir si le MediaScannerReceiver est activé ou désactivé? J'ai googlé pour cela et je n'ai pas pu trouver la réponse. Le MediaScannerConnection ne semble pas contrôler cela. En fait, je ne sais pas ce que ... pm-t

3) Est-il possible de le faire sans un accès root?

Merci!

+0

pm est powermanager – itsrajesh4uguys

Répondre

0

partie 2). C'était la question principale, et ceci est une solution:

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) { ... } 

Partie 1). La façon serait:

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

Le problème est que cela ne fonctionne pas (erreur fatale java.lang.SecurityException: Permission Denial: attempt to change component state from pid=23632, uid=10133, package uid=10081), puisque c'est un ensemble de système. Cela est dû à la partie 3:

Partie 3) Même un accès root n'est pas nécessaire, cela ne peut pas être fait en Java via l'API pour des raisons de sécurité: l'API ne le permet tout simplement pas. Donc, il me semble que Runtime.getRuntime().exec("su & pm ...") est le seul moyen.

Questions connexes