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);
}
}
}
}
};