Android,直接打开mtp文件夹

时间:2017-05-10 10:50:08

标签: java android android-intent mtp

我正在开展一个项目,需要通过USB线将智能手机连接到平板电脑。要从平板电脑访问智能手机中的文件,我使用Android的Intent.ACTION_GET_CONTENT来检索文件。我是,更具体地说是试图打开图片。

我知道这是可能的,因为当我点击描述智能手机的通知时,它会打开一个带有智能手机基本文件夹的默认Android应用程序。

我想要实现的是直接打开连接的智能手机存储,而不必从平板电脑切换到存储设备到智能手机。

我知道如何获取智能手机的音量名称,但这并没有帮助我取得进步。我检查了从意图收到的Uri,它类似于content://com.android.mtp.documents/document/951content://com.android.mtp.documents/tree/1021

我曾尝试使用Uri来打开所需的文件夹,但它不起作用。 我尝试了新的StorageManager API但没有成功。

最近,我更专注于尝试从我的应用程序中简单地访问文件,但使用上面提到的Uri或mount文件夹(/dev/bus/usb/001/002/)却什么都没有。 我也尝试了Environment.MEDIA_MOUNTED但没有成功。

我目前的代码是这样的: 请求使用智能手机的许可:

final UsbManager manager = (UsbManager) getActivity().getSystemService(Context.USB_SERVICE);
HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
if (deviceList.size() > 0) {//TODO switch to 1 on USBCameraFragment
    PendingIntent mPermissionIntent = PendingIntent.getBroadcast(context, 0, new Intent(ACTION_USB_PERMISSION), 0);
    UsbDevice device = (UsbDevice) deviceList.values().toArray()[0];
    manager.requestPermission(device, mPermissionIntent);
} else {
    Toast.makeText(getContext(), "Please connect your device to the tablet.", Toast.LENGTH_SHORT).show();
}

打开连接并启动意图:

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 = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
                if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
                    if(device != null){
                        Intent i = new Intent(Intent.ACTION_GET_CONTENT);

                        Uri path = MediaStore.Files.getContentUri(device.getProductName());
                        //Uri path = Uri.parse(Environment.getExternalStoragePublicDirectory(Environment.MEDIA_MOUNTED).getAbsolutePath());

                        i.setDataAndType(path, "image/*");
                        i.addCategory(Intent.CATEGORY_OPENABLE);

                        MtpDevice mtpDevice = new MtpDevice(device);

                        UsbDeviceConnection conn = ((UsbManager) getActivity().getSystemService(Context.USB_SERVICE)).openDevice(device);
                        mtpDevice.open(conn);

                        //1.5s to make sure I have allowed the MTP connection on the smartphone.
                        try{Thread.sleep(1500);}catch(InterruptedException e){}

                        startActivityForResult(i, Constants.PICKFILE_REQUEST_CODE);
                    }
                }
                else {
                    Log.d(TAG, "permission denied for device: " + device);
                }
            }
        }
    }
};

0 个答案:

没有答案