Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何知道MediaScanner是否已启用?_Android_Android Mediascanner - Fatal编程技术网

Android 如何知道MediaScanner是否已启用?

Android 如何知道MediaScanner是否已启用?,android,android-mediascanner,Android,Android Mediascanner,我真的不喜欢所有的MediaScanner Android系统以及它的实现方式、电池消耗、无法访问卡等,所以我制作了一个基于目录的图像查看器。我知道如何使用以下命令从控制台禁用(启用)扫描仪: su & pm disable (enable) com.android.providers.media/com.android.providers.media.MediaScannerReceiver 现在,我想从我的查看器的java代码中实现这一点。当然,我可以执行运行时.getRuntim

我真的不喜欢所有的MediaScanner Android系统以及它的实现方式、电池消耗、无法访问卡等,所以我制作了一个基于目录的图像查看器。我知道如何使用以下命令从控制台禁用(启用)扫描仪:

su & pm disable (enable) com.android.providers.media/com.android.providers.media.MediaScannerReceiver
现在,我想从我的查看器的java代码中实现这一点。当然,我可以执行
运行时.getRuntime().exec(…)
,但我有一些问题:

1) 没有
Runtime.getRuntime().exec()
,有没有办法做到这一点

2) 如何知道MediaScannerReceiver是启用还是禁用的?我在谷歌上搜索了这个,但找不到anwser。
MediaScannerConnection
似乎无法控制这一点。实际上,我不知道
pm
做什么

3) 是否可以在没有根访问权限的情况下执行此操作

谢谢

第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:权限拒绝:尝试将组件状态从pid=23632、uid=10133、包uid=10081更改),因为这是一个系统包。这是由于第3部分:

第3部分)甚至根访问都不是必需的,由于安全原因,不能通过API在java代码中完成:API根本不允许这样做。所以在我看来,
Runtime.getRuntime().exec(“su&pm…”)
是唯一的方法