Android, прямо откройте папку mtp

Я работаю над проектом, который требует подключения смартфона к планшету через USB-кабель. Для доступа к файлам со смартфона с планшета я использую Android Intent.ACTION_GET_CONTENT чтобы получить файлы. Я более конкретно пытаюсь открыть картинки.

Я знаю, что это возможно, поскольку, когда я нажимаю на уведомление, описывающее смартфон, оно открывает приложение Android по умолчанию с базовой папкой смартфона.

То, чего я пытаюсь добиться, - это непосредственно открыть хранилище подключенного смартфона вместо того, чтобы переключаться с планшета на хранилище на смартфон.

Я знаю, как получить громкое имя смартфона, но это не помогло мне прогрессировать. Я проверил Uri, полученный от намерения, это что-то вроде content://com.android.mtp.documents/document/951 или же content://com.android.mtp.documents/tree/1021,

Я пытался использовать эти Uri, чтобы открыть нужную папку, но это не сработало. Я попробовал новый StorageManager API без успеха.

В последнее время я больше сосредоточился на попытке доступа к файлам из моего приложения, но с использованием вышеупомянутого Uri или папки монтирования (/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();
}

Открытие соединения и запуск Intent:

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 ответов

Другие вопросы по тегам