1. 程式人生 > >Android之 MTP框架和流程分析

Android之 MTP框架和流程分析

複製程式碼
 1 static void android_mtp_MtpServer_add_storage(JNIEnv *env, jobject thiz, jobject jstorage)
 2 {
 3     Mutex::Autolock autoLock(sMutex);
 4 
 5     // 獲取MtpServer物件
 6     MtpServer* server = getMtpServer(env, thiz);
 7     if (server) {
 8         // field_MtpStorage_storageId 和 “MtpStorage.java中的mStorageId” 對應
9 jint storageID = env->GetIntField(jstorage, field_MtpStorage_storageId); 10 // field_MtpStorage_path 和 “MtpStorage.java中的mPath” 對應 11 jstring path = (jstring)env->GetObjectField(jstorage, field_MtpStorage_path); 12 // field_MtpStorage_description 和 “MtpStorage.java中的mDescription” 對應
13 jstring description = (jstring)env->GetObjectField(jstorage, field_MtpStorage_description); 14 // field_MtpStorage_reserveSpace 和 “MtpStorage.java中的mReserveSpace” 對應 15 jlong reserveSpace = env->GetLongField(jstorage, field_MtpStorage_reserveSpace); 16 // field_MtpStorage_removable 和 “MtpStorage.java中的mRemovable” 對應
17 jboolean removable = env->GetBooleanField(jstorage, field_MtpStorage_removable); 18 // field_MtpStorage_maxFileSize 和 “MtpStorage.java中的mMaxFileSize” 對應 19 jlong maxFileSize = env->GetLongField(jstorage, field_MtpStorage_maxFileSize); 20 21 // 將“jstring型別的path”轉換為“C語言中的char *型別” 22 const char *pathStr = env->GetStringUTFChars(path, NULL); 23 if (pathStr != NULL) { 24 // 獲取“儲存裝置”的描述字串 25 const char *descriptionStr = env->GetStringUTFChars(description, NULL); 26 if (descriptionStr != NULL) { 27 // 建立(MtpStorage.cpp)MtpStorage物件 28 MtpStorage* storage = new MtpStorage(storageID, pathStr, descriptionStr, 29 reserveSpace, removable, maxFileSize); 30 // 將該MtpStorage物件,新增到MtpServer中 31 server->addStorage(storage); 32 env->ReleaseStringUTFChars(path, pathStr); 33 env->ReleaseStringUTFChars(description, descriptionStr); 34 } else { 35 env->ReleaseStringUTFChars(path, pathStr); 36 } 37 } 38 } else { 39 ALOGE("server is null in add_storage"); 40 } 41 }
複製程式碼