PTPを使用しているカメラのファイルをタブレットにコピーしようとしています。私はアンドロイドAPI MTPDevice (https://developer.android.com/reference/android/mtp/MtpDevice.html#importFile%28int,%20java.lang.String%29)を使用しています。私は必要な許可(android.mtp.MtpClient.action.USB_PERMISSION)を要求しています。Mtp/Ptp Android
私はデバイスを開いて、関数はtrueを返し、USBConnection(Connexion OK)を開きます。
私は、タブレットの一時フォルダ(/ mnt/sdcard/tmpFolder)にカメラのすべてのファイルをインポートしようとしています。パスは私のタブレット上に存在するが、私はimportFiles関数にそれを与えるとき、私はエラーがあります:私は、私がメッセージを持って存在しないパスを試してみる
[LOGCAT]
MtpDevice: readObject: /mnt/sdcard/tmpFolder
MtpDevice: open failed for /mnt/sdcard/tmpFolder
Debug: File import KO
を:
[LOGCAT]
MtpDevice: readObject: /mnt/sdcard/tptp
MtpDevice: readResponse failed
Debug: File import KO
誰かが私を助けることができますか?
ソリューションは、(githubの上で発見される):同じ問題を抱えている人々のため
おかげ
@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;
}
'必要な要求を持っています許可、およびマニフェストに書いてください。それはどれでしょうか?残りの部分については、どのパスのメッセージを正確かつ正確にいつどこで表示するかははっきりしていません。 – greenapps
'createTempFolderCamera()'間違った関数名は、フォルダを作成せず、フォルダのFileオブジェクトのみを返すためです。 – greenapps
'Log.d(" Debug "、" File exists ");'。あなたは「存在する」という意味ですか? – greenapps