android写入usb笔式驱动器的权限

时间:2015-12-23 16:35:10

标签: android permissions storage usb-drive writing

在我的应用中,我需要在USB笔式驱动器上写文件。在三星标签4上,我在阅读和写作方面都没有任何问题。我的应用很棒。 在asus zenpad 10上,有些不同...... 从usb笔式驱动器读取时我没有问题 相反,我在写作时拒绝访问,即在代码中获得异常:

 try {
    fOut = new FileOutputStream("/storage/USBdisk/prova.bin");
 } catch (FileNotFoundException e) {
    e.printStackTrace(); 
    return;
 }

在我的androidManifest中,当然,它的定义是:

 <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE"/>
 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
 <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE"/>

我需要做什么?

2 个答案:

答案 0 :(得分:0)

通常 USB pendrive将被称为SD卡, 但Androidmanifest.xml中的权限需要声明不同的权限, USB外部存储需要媒体启用权限,如下所示

<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />

请阅读 android official document

EX:

private static final String ACTION_USB_PERMISSION =
    "com.android.example.USB_PERMISSION";
private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {

    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (ACTION_USB_PERMISSION.equals(action)) {
            synchronized (this) {
                UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);

                if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
                    if(device != null){
                      //call method to set up device communication
                   }
                } 
                else {
                    Log.d(TAG, "permission denied for device " + device);
                }
            }
        }
    }
};

检查Storageanswer here

答案 1 :(得分:0)

经过其他来源的研究后,我发现了这一点......它可能对你有帮助!

由于串口转换器是USB设备,Android平板电脑必须充当USB主机。此功能自Android 3.1起可用。 API开发人员页面上提供了API文档,其中包含代码示例。

要与转换器进行实际通信,您必须了解更多关于它的内部结构:市场上有许多不同的设备,一些使用USB HID,另一些使用USB CDC设备类或甚至不遵守任何设备类。 linux lsusb命令可能有助于获取设备/接口描述符。

在典型的CDC设备上,您必须与两个批量端点进行交互,并可能使用一些与接口相关的请求来设置波特率等。请参阅USB实施者论坛上的通信设备类规范。

如果您的设备只有一个IN和一个OUT批量端点(在控制端点旁边),您可能会尝试使用OUT端点上的UsbDeviceConnection.bulkTransfer()方法将一些字节写入串行线路。这很有可能只是工作,但是对于干净的实现,你应该坚持类规范。