Android 通过MTP拷贝音乐文件流程分析
1 read()
根据MTP启动流程中分析可知: MTP启动后,MtpServer.cpp中的MtpServer::run()会通过read()不断地从"/dev/mtp_usb"中读取出"PC发来的消息"。
2 handleRequest()
read()在读取到PC来的消息之后,会交给MtpServer::handleRequest()进行处理。"PC读取文件内容"的消息的ID是MTP_OPERATION_SEND_OBJECT;因此,它会通doSendObject()进行处理。
3 doSendObject()
MtpServer.cpp中doSendObject()中
……………交给Kernal负责传输文件
……………………………….
mDatabase->endSendObject(mSendObjectFilePath, mSendObjectHandle, mSendObjectFormat, result == MTP_RESPONSE_OK);
4 endSendObject ()
doSendObject()会调用的endSendObject ()。该函数在android_mtp_MtpDatabase.cpp中实现,实际上调用MtpDatabase.java中的endSendObject(),会启动媒体扫描
…………
mMediaScanner.scanMtpFile(path, mVolumeName, handle, format);
…………
对于MtpDatabase的构造函数:
public MtpDatabase(Context context, String volumeName, String storagePath,
String[] subDirectories) {
native_setup();
…………………………………………….
mMediaScanner = new MediaScanner(context);
…………………………………………….
// Set locale to MediaScanner.
Locale loc
本文地址:https://blog.csdn.net/qq_42894864/article/details/104802822