【问题标题】:Is it possible to Turn Off USB Storage on Android Devices programatically?是否可以通过编程方式关闭 Android 设备上的 USB 存储?
【发布时间】:2015-06-24 04:50:00
【问题描述】:

我试图一遍又一遍地搜索并且很困惑我们是否可以在不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);

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

提前致谢。

【问题讨论】:

  • @Khanna:你看到我的回答了吗?
  • @Y.S. - 我已经看到你的答案,并且已经为你的真实答案“向上”了。但我期待着除了root手机之外还有一些方法可以深入解决这个问题。
  • 我认为我的回答清楚地说明了为什么它 不是 是一种可行的方法,以及为什么再多的摆弄也不会产生可行的结果。对不起,但它就是这样:)
  • @Y.S.谢谢 !! :)

标签: java android reflection android-permissions android-usb


【解决方案1】:

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

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

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

就是这样。

【讨论】:

    【解决方案2】:

    如果当前你的Sd卡是SHARED,则表示它已以MSC模式连接到PC,你可以检查这种情况如下:

    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_SHARED.equals(state)) {
    // Sd card has connected to PC in MSC mode
    }
    

    现在您可以通过以下方式强制关闭 USB 大容量存储连接:

    MountService.setUsbMassStorageEnabled(false);
    
    
    
    //or
    
    
    
    StorageManager.disableUsbMassStorage();
    
    
    
    //but unfortunately, both these API are not public accessible?!
    

    【讨论】:

    • Rajan Bhavsar - 正如您所建议的,我已经尝试过,但在使用权限时遇到了问题。我无法使用此权限 android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"。你知道如何解决它。而且你能告诉我如何在你的活动中导入这个 StorageManager,因为我知道这是不可能的。
    猜你喜欢
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-24
    • 2013-04-24
    相关资源
    最近更新 更多