2013-05-04 106 views
0

我真的不喜欢所有的MediaScanner Android系统,以及它如何实现,电池消耗,卡无法访问等,所以我做了一个基于目录的图像查看器。我知道如何从一个控制台禁用(启用)扫描仪这样的:如何知道MediaScanner是否已启用?

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

现在,我想从我的浏览器的Java代码做到这一点。当然,我可以做一个Runtime.getRuntime().exec(...),但我有一些问题:

1)有没有这样做的方式没有Runtime.getRuntime().exec()

2)如何知道MediaScannerReceiver是启用还是禁用?我为此搜索了Google搜索,但无法找到该搜索结果。 MediaScannerConnection似乎并没有控制这一点。其实,我不知道pm做什么...

3)有没有可能做到这一点没有root权限?

谢谢!

+0

pm是powermanager – itsrajesh4uguys 2013-05-04 17:04:13

回答

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部分)甚至不需要根访问权限,因为安全原因,无法通过API在Java代码中完成:API根本不允许它。所以在我看来,Runtime.getRuntime().exec("su & pm ...")是唯一的方法。

相关问题