android mtp 单反 api,android读取单反的数据

news/2024/10/29 3:39:44/

上一节说过怎么去获取usb的数据,而项目中需要的逝去获取单反保存的照片,当然你可以用读卡器,用读卡器的话和usb的原理是一样的,也可以直接使用otg连接android手机

下面,来说下单反-->otg-->手机读取照片的实现

同usb一样,先要获取到设备,这里我做了一个判断,来判断是否为相机

private void readDeviceList() {

usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);

if (usbManager.getDeviceList().size() == 0) {

Toas("没有设备");

list = new ArrayList();

adapter.notifyDataSetChanged();

return;

}

for (UsbDevice device : usbManager.getDeviceList().values()) {

for (int i = 0; i < device.getInterfaceCount(); i++) {

UsbInterface usbInterface = device.getInterface(i);

//MtpDevice --》相机

if (usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_STILL_IMAGE) {

if (usbManager.hasPermission(device)) {

readMtpDevice(device);

break;

} else {

Toas("没有设备权限,请求设备权限");

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);

usbManager.requestPermission(device, pendingIntent); //该代码执行后,系统弹出一个对话框,

}

} else {

Toas("不是相机类型");

}

}

}

}

读取设备的信息

private void readMtpDevice(UsbDevice device) {

UsbDeviceConnection usbDeviceConnection = usbManager.openDevice(device);

mtpDevice = new MtpDevice(device);

if (!mtpDevice.open(usbDeviceConnection)) {

Toas("无法打开设备");

return;

}

new readBitmapTask(mtpDevice).execute();

}

异步任务

class readBitmapTask extends AsyncTask {

private MtpDevice mtpDevice;

public readBitmapTask(MtpDevice mtpDevice) {

this.mtpDevice = mtpDevice;

}

@Override

protected Void doInBackground(Void... params) {

int[] storageIds = mtpDevice.getStorageIds();

if (storageIds == null) {

// Toas("设备无用");

return null;

}

for (int storageId : storageIds) {

getObjectsInStorage(mtpDevice, storageId, 0, 0);

}

return null;

}

@Override

protected void onProgressUpdate(Void... values) {

super.onProgressUpdate(values);

}

@Override

protected void onPostExecute(Void aVoid) {

super.onPostExecute(aVoid);

if (list.size() > 0) {

Collections.sort(list, new Comparator() {

@Override

public int compare(OTGObject o1, OTGObject o2) {

if (o1.getObjectHandle() > o2.getObjectHandle()) {

return 1;

}

return -1;

}

});

}

adapter.notifyDataSetChanged();

}

}

读取文件,所有的照片,这里是遍历了所有的文件,数据越多,速度越慢,暂时没有找到好的方法,有好的方法的亲们请留言

private void getObjectsInStorage(MtpDevice mtpDevice, int storageId, int format, int parent) {

int[] objectHandles = mtpDevice.getObjectHandles(storageId, format, parent);

if (objectHandles == null) {

Log.e(TAG, "objectHandles不可用");

return;

}

for (int objectHandle : objectHandles) {

MtpObjectInfo mtpObjectInfo = mtpDevice.getObjectInfo(objectHandle);

if (mtpObjectInfo == null) {

Log.e(TAG, "mtpObjectInfo == null");

continue;

}

int parentOfObject = mtpObjectInfo.getParent();

if (parentOfObject != parent) {

continue;

}

int associationType = mtpObjectInfo.getAssociationType();

if (associationType == MtpConstants.ASSOCIATION_TYPE_GENERIC_FOLDER) {

//这个代表的是文件夹,需要再次遍历文件夹里面的信息

getObjectsInStorage(mtpDevice, storageId, format, objectHandle);

} else if (mtpObjectInfo.getFormat() == MtpConstants.FORMAT_EXIF_JPEG && mtpObjectInfo.getProtectionStatus() != MtpConstants

.PROTECTION_STATUS_NON_TRANSFERABLE_DATA) {

//这里的判断是可用的图片

//根据objecthandle和mtpobjectinfo可以获取到图片的二进制byte[],可以获取图片的名字等等信息

}

}

}

** 现在的问题是,使用for循环遍历所有的图片的话,速度很慢,亲们有没有更好的方法**


http://www.ppmy.cn/news/383104.html

相关文章

DSLR Video Tips: Software 数码单反相机视频提示:软件 Lynda课程中文字幕

DSLR Video Tips: Software 中文字幕 数码单反相机视频提示&#xff1a;软件 中文字幕DSLR Video Tips: Software 视频制作不会停留在您的数码单反相机中 下一步创建一个有凝聚力的故事&#xff0c;并寻找您的项目发生在后期制作&#xff1a;像Premiere Pro和Final Cut Pro软…

Java实现的五子棋游戏 ~java.awtjava.swing

文章目录 Java实现的五子棋游戏1.实现效果2.实现源码2.1运行主函数main.java2.2 棋盘布局Chessboard.java3.Algorithm算法 点击下载链接&#xff1a;Java实现的五子棋游戏源码下载 Java实现的五子棋游戏 作业要求&#xff1a; &#xff08;1&#xff09;课题代号&#xff1a; …

Rust 基础语法

Rust 基础语法 变量&#xff0c;基本类型&#xff0c;函数&#xff0c;注释和控制流&#xff0c;这些几乎是每种编程语言都具有的编程概念。 这些基础概念将存在于每个 Rust 程序中&#xff0c;及早学习它们将使你以最快的速度学习 Rust 的使用。 变量 首先必须说明&#x…

YUV420笔记

YUV420 有YU12、YV12、NV12、NV21 YU12存储格式是 YU12存储格式是YU13中的UV顺序反过来 NV12存储格式是 NV21是NV12数据取反 YUV420_888 是YCbCr的泛化格式&#xff0c;不会具体指明是YU12&#xff0c;YV12&#xff0c;NV12&#xff0c;或是是NV21。它能够表示任何4:2:0的平…

(五) ElasticSearch 数据类型和文档CRUD操作

1.ES数据类型 官方文档地址&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html#_complex_datatypes 核心数据类型&#xff08;Core Data Types&#xff09;&#xff1a; 核心数据类型是 Elasticsearch 最基本和常用的数据类型…

PMP证书能直接升级项目管理专业人员能力评价(CSPM)三级吗?

2021年10月&#xff0c;中共中央、国务院发布的《国家标准化发展纲要》明确提出构建多层次从业人员培养培训体系&#xff0c;开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由中国标准化协会&#xff08;CAS&#xff09;组织开展的项…

关于 QQ泫舞刷点卷软件

力求。。。 各位 哥哥 姐姐 们 你们谁会搞 这 高端外挂吗刷 点卷 给个我 好吗 嘿嘿 刷J别的也可以也忽忽

php按选定日期查询,php mysql查询指定范围内日期

摘要 腾兴网为您分享:php mysql查询指定范围内日期&#xff0c;掌上新华&#xff0c;掌上公交&#xff0c;学习帮&#xff0c;喜马拉雅等软件知识&#xff0c;以及mts&#xff0c;97漫画网&#xff0c;三菱plc编程软件win10&#xff0c;零点八&#xff0c;2016考研国家线&#…