Я пытаюсь скопировать файлы моей камеры, которые используют PTP, на свой планшет. Я использую Android API MTPDevice (https://developer.android.com/reference/android/mtp/MtpDevice.html#importFile%28int,%20java.lang.String%29), у меня есть запрос на необходимое разрешение (android.mtp .MtpClient.action.USB_PERMISSION).
Я открываю устройство, функция возвращает значение true и открывает USBConnection (подключение OK).
Я пытаюсь импортировать все файлы камеры во временную папку на своем планшете (/mnt/sdcard/tmpFolder). Путь существует на моем планшете, но когда я передаю его функции importFiles, у меня возникает ошибка:
[ЛОГКАТ]
MtpDevice: readObject: /mnt/sdcard/tmpFolder
MtpDevice: open failed for /mnt/sdcard/tmpFolder
Debug: File import KO
У меня есть попытка пути не существует, у меня есть сообщение:
[ЛОГКАТ]
MtpDevice: readObject: /mnt/sdcard/tptp
MtpDevice: readResponse failed
Debug: File import KO
Кто-нибудь может мне помочь?
Спасибо
@Background
@DebugLog
public void getMTPDevice() {
HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
if (deviceIterator.hasNext()) {
UsbDevice usbDevice = deviceIterator.next();
device = openDeviceLocked(usbDevice);
if(device!=null){
File folder = returnTempFolderCamera();
if(folder.exists()){
Log.d("Debug", "Folder exist /mnt/sdcard/tmpFolder");
if(device.importFile(0,folder.getPath()))
{
Toast.makeText(this, "File import OK", Toast.LENGTH_LONG).show();
Log.d("Debug", "Files import OK");
}else {
Toast.makeText(this, "File import KO", Toast.LENGTH_LONG).show();
Log.d("Debug", "Files import KO");
}
}
}
}
}/**
* Opens the {@link android.hardware.usb.UsbDevice} for an MTP or PTP device
* and return an {@link android.mtp.MtpDevice} for it.
*
* @param usbDevice
* the device to open
* @return an MtpDevice for the device.
*/
@DebugLog
private MtpDevice openDeviceLocked(UsbDevice usbDevice) {
String deviceName = usbDevice.getDeviceName();
byte[] data = new byte[128];
int TIMEOUT = 0;
boolean forceClaim = true;
// don't try to open devices that we have decided to ignore
// or are currently asking permission for
if (isCamera(usbDevice)
&& !mRequestPermissionDevices.contains(deviceName)) {
if (!manager.hasPermission(usbDevice)) {
manager.requestPermission(usbDevice, mPermissionIntent);
mRequestPermissionDevices.add(deviceName);
} else {
UsbInterface intf = usbDevice.getInterface(0);
UsbEndpoint endpoint = intf.getEndpoint(0);
UsbDeviceConnection connection = manager.openDevice(usbDevice);
connection.claimInterface(intf, forceClaim);
connection.bulkTransfer(endpoint, data, data.length, TIMEOUT);
if (connection != null) {
MtpDevice mtpDevice = new MtpDevice(usbDevice);
if (mtpDevice.open(connection)) {
mDevices.put(usbDevice.getDeviceName(), mtpDevice);
return mtpDevice;
}
}
}
}
return null;
}
private File returnTempFolder(){
File tmp = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/tmpFolder");
return tmp;
}
have request necessary permission, and write in the manifest
. Какие это будут? В остальном ваш пост довольно неясен, когда и где вы размещаете сообщения, для каких именно путей. - person greenapps   schedule 11.01.2017createTempFolderCamera()
. Неверное имя функции, так как она не создает папку, а только возвращает объект File для папки. - person greenapps   schedule 11.01.2017Log.d("Debug", "File exist");
. Вы имеете в виду «папка существует»? - person greenapps   schedule 11.01.2017Log.d("Debug", "Folder exist /mnt/sdcard/tmpFolder");
. Лучше поменять наLog.d("Debug", "Folder exists: "+ folder.getAbsolutePath());
. - person greenapps   schedule 12.01.2017MtpDevice: readObject: /mnt/sdcard/tmpFolder
. Пожалуйста, покажите фрагмент кода, который выдает это сообщение. Я не понимаю, почему эта функция пытается прочитать ту папку, в которую она должна записывать файлы. - person greenapps   schedule 12.01.2017if(folder.exists()){
У вас нет отчета журнала или всплывающего уведомления на случай, если папка не существует. Почему нет? Почему вы не информируете пользователя правильно? И у вас нет кода для создания этой папки. Вы только создаете имя. Я уже говорил это раньше, но ты не реагировал. - person greenapps   schedule 12.01.2017