java - 是否可以通过编程方式关闭 Android 设备上的 USB 存储?

标签 java android reflection android-permissions android-usb

我试过一遍又一遍地搜索,但很困惑我们是否可以在不对手机进行 root 的情况下控制 USB 存储,如果可以,那么如何?我尝试了以下方法来启用和禁用权限,但都是徒劳的:

StorageManager storage = (StorageManager)getApplicationContext().getSystemService(STORAGE_SERVICE);
 Method method = storage.getClass().getDeclaredMethod("enableUsbMassStorage");
 method.setAccessible(true); 
 Object r = method.invoke(storage);

//And to disble mass storage:

StorageManager storage = (StorageManager) getApplicationContext().getSystemService(STORAGE_SERVICE);
Method method = storage.getClass().getDeclaredMethod("disableUsbMassStorage");
method.setAccessible(true);
Object r = method.invoke(storage);

如果有人对此有任何想法,请分享您的知识。

提前致谢。

最佳答案

对您的问题的简短回答是。您不能以编程方式使用 USB 大容量存储权限。您也找不到任何 Android 应用程序可以为任何/所有手机可靠地执行此操作。

默认情况下,Android 框架不允许第三方应用程序以编程方式绕过 USB 存储权限。 这个选择始终留给用户,这是正确的方法。想想看:如果允许,任何第三方应用程序都可能滥用该权限,并且通过 USB 连接传输数据。

您尝试使用的方法假设我们知道相关方法的名称并通过反射调用它们。这适用于修改了基本框架并公开相关 API 调用的某些 OEM。但它假定您知道这些方法的名称,并且它只适用于现有的大量 Android 手机型号中的一小部分。它不适用于大多数手机,当然也不适用于任何具有原始 Android 操作系统源代码的 Nexus 设备。

就是这样。

关于java - 是否可以通过编程方式关闭 Android 设备上的 USB 存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31017851/

相关文章:

Java - 两个圆重叠或在里面

java - 无法使用 Caffeine 创建简单缓存

java - 查询今天、一周内、一个月内

.net - 将反射 .GetValue() 对象强转换为通用 DbSet

Java - 如何有效地编写一个偶尔有漏洞的顺序文件

java - 如何在 Android 中设置 textView 与 Java 对齐?

android - 没有 google-services.json 但仍从我的 Firebase 项目中获取远程配置

java - Android 中如何将数字转换为日期?

c# - 如何在通用构造函数中获取类名

c# - 奇怪的反射问题 - 无法得到它