18182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood/* 28182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Copyright (C) 2010 The Android Open Source Project 38182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 48182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Licensed under the Apache License, Version 2.0 (the "License"); 58182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * you may not use this file except in compliance with the License. 68182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * You may obtain a copy of the License at 78182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 88182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * http://www.apache.org/licenses/LICENSE-2.0 98182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * 108182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * Unless required by applicable law or agreed to in writing, software 118182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * distributed under the License is distributed on an "AS IS" BASIS, 128182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * See the License for the specific language governing permissions and 148182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood * limitations under the License. 158182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood */ 168182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 178182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwoodpackage android.mtp; 188182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 19c4308f01c965571dc2354107c3574df113e397eeMike Lockwoodimport android.hardware.usb.UsbDevice; 20acc29cc91be634070c92a807df412ced97b9b375Mike Lockwoodimport android.hardware.usb.UsbDeviceConnection; 218182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 228182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood/** 230cdd9f7def708a71a0d0722361f52c0416370dc6Scott Main * This class represents an MTP or PTP device connected on the USB host bus. An application can 240cdd9f7def708a71a0d0722361f52c0416370dc6Scott Main * instantiate an object of this type, by referencing an attached {@link 250cdd9f7def708a71a0d0722361f52c0416370dc6Scott Main * android.hardware.usb.UsbDevice} and then use methods in this class to get information about the 260cdd9f7def708a71a0d0722361f52c0416370dc6Scott Main * device and objects stored on it, as well as open the connection and transfer data. 278182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood */ 288182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwoodpublic final class MtpDevice { 298182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 308182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private static final String TAG = "MtpDevice"; 318182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 328182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private final UsbDevice mDevice; 338182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 348182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood static { 358182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood System.loadLibrary("media_jni"); 368182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 378182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 38540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood /** 39540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * MtpClient constructor 40540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * 41c4308f01c965571dc2354107c3574df113e397eeMike Lockwood * @param device the {@link android.hardware.usb.UsbDevice} for the MTP or PTP device 42540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood */ 438182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public MtpDevice(UsbDevice device) { 448182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood mDevice = device; 458182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 468182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 47540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood /** 48acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood * Opens the MTP device. Once the device is open it takes ownership of the 49acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood * {@link android.hardware.usb.UsbDeviceConnection}. 50acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood * The connection will be closed when you call {@link #close()} 51acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood * The connection will also be closed if this method fails. 52540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * 53acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood * @param connection an open {@link android.hardware.usb.UsbDeviceConnection} for the device 54540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * @return true if the device was successfully opened. 55540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood */ 56acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood public boolean open(UsbDeviceConnection connection) { 57acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood boolean result = native_open(mDevice.getDeviceName(), connection.getFileDescriptor()); 58acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood if (!result) { 59acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood connection.close(); 608182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 61acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood return result; 628182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 638182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 64540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood /** 6511dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * Closes all resources related to the MtpDevice object. 6611dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * After this is called, the object can not be used until {@link #open} is called again 6711dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * with a new {@link android.hardware.usb.UsbDeviceConnection}. 68540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood */ 698182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public void close() { 708182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood native_close(); 718182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 728182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 738182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood @Override 748182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood protected void finalize() throws Throwable { 758182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood try { 768182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood native_close(); 778182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } finally { 788182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood super.finalize(); 798182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 808182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 818182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 82540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood /** 83540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * Returns the name of the USB device 8411dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * This returns the same value as {@link android.hardware.usb.UsbDevice#getDeviceName} 8511dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * for the device's {@link android.hardware.usb.UsbDevice} 86540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * 87540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * @return the device name 88540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood */ 898182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public String getDeviceName() { 908182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return mDevice.getDeviceName(); 918182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 928182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 93540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood /** 9411dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * Returns the USB ID of the USB device. 9511dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * This returns the same value as {@link android.hardware.usb.UsbDevice#getDeviceId} 9611dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * for the device's {@link android.hardware.usb.UsbDevice} 97540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * 98540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * @return the device ID 99540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood */ 1008182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public int getDeviceId() { 1018182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return mDevice.getDeviceId(); 1028182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 1038182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 1048182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood @Override 1058182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public String toString() { 1068182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return mDevice.getDeviceName(); 1078182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 1088182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 109540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood /** 11011dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * Returns the {@link MtpDeviceInfo} for this device 111540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * 112540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * @return the device info 113540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood */ 1148182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public MtpDeviceInfo getDeviceInfo() { 1158182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return native_get_device_info(); 1168182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 1178182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 118540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood /** 119540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * Returns the list of IDs for all storage units on this device 12011dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * Information about each storage unit can be accessed via {@link #getStorageInfo}. 121540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * 12211dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * @return the list of storage IDs 123540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood */ 1248182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public int[] getStorageIds() { 1258182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return native_get_storage_ids(); 1268182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 1278182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 128540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood /** 129540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * Returns the list of object handles for all objects on the given storage unit, 130540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * with the given format and parent. 13111dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * Information about each object can be accessed via {@link #getObjectInfo}. 132540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * 133540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * @param storageId the storage unit to query 134540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * @param format the format of the object to return, or zero for all formats 135540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * @param objectHandle the parent object to query, or zero for the storage root 136540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * @return the object handles 137540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood */ 1388182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public int[] getObjectHandles(int storageId, int format, int objectHandle) { 1398182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return native_get_object_handles(storageId, format, objectHandle); 1408182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 1418182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 142540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood /** 143540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * Returns the data for an object as a byte array. 14411dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * This call may block for an arbitrary amount of time depending on the size 14511dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * of the data and speed of the devices. 146540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * 147540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * @param objectHandle handle of the object to read 148540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * @param objectSize the size of the object (this should match 14911dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * {@link MtpObjectInfo#getCompressedSize} 150540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * @return the object's data, or null if reading fails 151540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood */ 1528182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public byte[] getObject(int objectHandle, int objectSize) { 1538182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return native_get_object(objectHandle, objectSize); 1548182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 1558182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 156540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood /** 157540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * Returns the thumbnail data for an object as a byte array. 15811dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * The size and format of the thumbnail data can be determined via 15911dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * {@link MtpObjectInfo#getThumbCompressedSize} and 16011dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * {@link MtpObjectInfo#getThumbFormat}. 16111dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * For typical devices the format is JPEG. 162540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * 163540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * @param objectHandle handle of the object to read 164540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * @return the object's thumbnail, or null if reading fails 165540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood */ 1668182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public byte[] getThumbnail(int objectHandle) { 1678182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return native_get_thumbnail(objectHandle); 1688182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 1698182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 170540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood /** 17111dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * Retrieves the {@link MtpStorageInfo} for a storage unit. 172540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * 173540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * @param storageId the ID of the storage unit 174540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * @return the MtpStorageInfo 175540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood */ 1768182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public MtpStorageInfo getStorageInfo(int storageId) { 1778182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return native_get_storage_info(storageId); 1788182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 1798182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 180540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood /** 18111dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * Retrieves the {@link MtpObjectInfo} for an object. 182540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * 183540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * @param objectHandle the handle of the object 184540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * @return the MtpObjectInfo 185540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood */ 1868182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public MtpObjectInfo getObjectInfo(int objectHandle) { 1878182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return native_get_object_info(objectHandle); 1888182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 1898182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 190540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood /** 19111dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * Deletes an object on the device. This call may block, since 19211dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * deleting a directory containing many files may take a long time 19311dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * on some devices. 194540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * 195540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * @param objectHandle handle of the object to delete 196540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * @return true if the deletion succeeds 197540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood */ 1988182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public boolean deleteObject(int objectHandle) { 1998182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return native_delete_object(objectHandle); 2008182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 2018182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 202540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood /** 203540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * Retrieves the object handle for the parent of an object on the device. 204540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * 205540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * @param objectHandle handle of the object to query 206540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * @return the parent's handle, or zero if it is in the root of the storage 207540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood */ 2088182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public long getParent(int objectHandle) { 2098182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return native_get_parent(objectHandle); 2108182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 2118182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 212540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood /** 213540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * Retrieves the ID of the storage unit containing the given object on the device. 214540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * 215540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * @param objectHandle handle of the object to query 216540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * @return the object's storage unit ID 217540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood */ 21862cfeeb821afb2f3d3b78ad93caa13408cd26eacMike Lockwood public long getStorageId(int objectHandle) { 2198182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return native_get_storage_id(objectHandle); 2208182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 2218182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 222540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood /** 223540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * Copies the data for an object to a file in external storage. 22411dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * This call may block for an arbitrary amount of time depending on the size 22511dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * of the data and speed of the devices. 226540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * 227540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * @param objectHandle handle of the object to read 228540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * @param destPath path to destination for the file transfer. 229540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * This path should be in the external storage as defined by 230540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * {@link android.os.Environment#getExternalStorageDirectory} 231540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood * @return true if the file transfer succeeds 232540380fb0a45b12af3970f9ea1ed041607451f46Mike Lockwood */ 2338182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood public boolean importFile(int objectHandle, String destPath) { 2348182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood return native_import_file(objectHandle, destPath); 2358182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood } 2368182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 2378182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood // used by the JNI code 238e2e59326f13cf291bf5b37989390fd2a55a94f0cAshok Bhat private long mNativeContext; 2398182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood 2408182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private native boolean native_open(String deviceName, int fd); 2418182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private native void native_close(); 2428182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private native MtpDeviceInfo native_get_device_info(); 2438182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private native int[] native_get_storage_ids(); 2448182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private native MtpStorageInfo native_get_storage_info(int storageId); 2458182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private native int[] native_get_object_handles(int storageId, int format, int objectHandle); 2468182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private native MtpObjectInfo native_get_object_info(int objectHandle); 2478182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private native byte[] native_get_object(int objectHandle, int objectSize); 2488182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private native byte[] native_get_thumbnail(int objectHandle); 2498182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private native boolean native_delete_object(int objectHandle); 2508182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private native long native_get_parent(int objectHandle); 2518182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private native long native_get_storage_id(int objectHandle); 2528182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood private native boolean native_import_file(int objectHandle, String destPath); 2538182e72479a8b0d832df9c392890b25bfa6f97b5Mike Lockwood} 254