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 }
複製程式碼

相關推薦

androidMTP框架流程分析

1 static void android_mtp_MtpServer_add_storage(JNIEnv *env, jobject thiz, jobject jstorage) 2 { 3 Mutex::Autolock autoLock(sMutex); 4 5

Android MTP框架流程分析 (3)

前面轉發了篇部落格介紹了MTP, 偏重於上層,已經很清楚了。這篇側重於底層,按照一定的流程講。 1. 程式碼位置 packages/providers/MediaProvider/src/com/android/providers/media/MtpReceiver.j

Android MTP框架流程分析

1 static void android_mtp_MtpServer_add_storage(JNIEnv *env, jobject thiz, jobject jstorage) 2 { 3 Mutex::Autolock autoLock(sMutex); 4 5

Android MTP框架流程分析

packages/providers/MediaProvider/src/com/android/providers/media/MtpReceiver.java packages/providers/MediaProvider/src/com/android/providers/media/MtpS

Android OTA升級原理流程分析(一)

這篇及以後的篇幅將通過分析update.zip包在具體Android系統升級的過程,來理解Android系統中Recovery模式服務的工作原理。我們先從update.zip包的製作開始,然後是Android系統的啟動模式分析,Recovery工作原理,如何從

Android OTA升級原理流程分析(三)---Android系統的三種啟動模式

        以下的篇幅開始分析我們在上兩個篇幅中生成的update.zip包在具體更新中所經過的過程,並根據原始碼分析每一部分的工作原理。 一、       系統更新update.zip包的兩種方式 1.  通過上一個文件,我們知道了怎樣製作一個updat

Android OTA升級原理流程分析(二)---update.zip差分包問題的解決

Android OTA升級原理和流程分析(二)—update.zip差分包問題的解決 在上一篇末尾提到的生成差分包時出現的問題,現已解決,由於最近比較忙,相隔的時間也比較長,所以單列一個篇幅提示大家。這個問題居然是原始碼中的問題,可能你已經制作成功了,不過我的

Spring系列Spring框架SpringAOP整合過程分析(十二)

轉載請註明出處:https://blog.csdn.net/zknxx/article/details/80808447 在這篇文章中我們接著上一篇的文章說。在上一篇文章中我們提到了getAdvicesAndAdvisorsForBean這個方法,這個方法的內

Spring系列Spring框架SpringAOP整合過程分析(十)

轉載請註明出處:https://blog.csdn.net/zknxx/article/details/80724180 在開始這個系列之前大家先想一下我們是怎麼在專案中使用SpringAOP的(這裡的分析都是基於AspectJ註解的)。我們需要在我們的Spr

Android系統載入Apk檔案的時機流程分析(1)--Android 4.4.4 r1的原始碼

Android系統在啟動時安裝應用程式的過程,這些應用程式安裝好之後,還需要有一個Home應用程式來負責把它們在桌面上展示出來,在Android系統中,這個預設的Home應用程式就是Launcher了。Android系統的Home應用程式Launcher是由Activit

AndroidFresco框架(四)--ImagePipeline的呼叫使用

之前大致把ImagePipeline的配置和底層實現都講了一下,這一篇來重點講一下我們在傳送圖片請求的時候是怎麼把請求傳給ImagePipeline的,以及我們如何自己直接對ImagePipeline例項進行請求,記憶體管理等操作。SimpleDraweeView中Image

1、Android項目框架搭建 (分析需求、整理資料)

res 菜單 master sliding pan mos 時間 nes oid 閑來無事、想搭個框架試試 分析一般應用 將資料整理整理 粗略統計 須要下面資料 1、android-pulltorefresh 一個強大的拉動刷新開源項目,支持各種控

[Abp 源碼分析] 一、Abp 框架啟動流程分析

arch rep man job dsi 法則 依賴 gconf dep Abp 不一定僅用於 Asp.Net Core 項目,他也可以在 Console 與 WinFrom 項目當中進行使用,所以關於啟動流程可以分為兩種,一種是 Asp.Net Core 項目的啟動流程

C語言基礎函數流程控制

argv round ext 組成 htm pre 多個參數 nor ali 函數和流程控制也是每個編程語言的基本概念,函數是劃分模塊的最小單位,良好的函數規劃能直接提升軟件的質量,C語言的流程控制主要由以下幾個語句組成,條件分支語句、選擇語句、循環語句、goto語句、r

滴滴開源Android外掛化框架VirtualAPK原理分析

概述 Activity 支援 Hook ActivityManagerService Hook Instrumentation 啟動外掛Acti

AndroidVolley框架載入網路圖片

更多幹貨 分散式實戰(乾貨) spring cloud 實戰(乾貨) mybatis 實戰(乾貨) spring boot 實戰(乾貨) React 入門實戰(乾貨) 構建中小型網際網路企業架構(乾貨) python 學習持續更

Android 採用execSQLrawQuery方法完成資料的添刪改查操作

/*  Android提供了一個名為SQLiteDatabase的類,該類封裝了一些操作資料庫的API,使用該類可以完成對資料進行新增(Create)、查詢(Retrieve)、更新(Update)和刪除(Delete)操作(這些操作簡稱為CRUD)。對SQLiteData

K8S 原始碼探祕 kubeadm join 執行流程分析

一、引言        本文將基於 Kubernetes 1.12 版本,分析 kubeadm  join 的執行流程,希望對讀者理解 k8s 有幫助!        關於 init 流程

K8S 原始碼探祕 kubeadm init 執行流程分析

一、引言        kubeadm 是 k8s 重要的快速部署工具,也是其原生支援的部署工具,在實現自動化部署方面具有重要的研究價值。        本文將基於 Kubernetes 1.12 版本,分析

Android ConstraintLayout完全解析效能分析(章節二)

這篇文章是基於Android ConstraintLayout完全解析和效能分析(章節一)基礎上對屬性的深入詳解,如果之前對Android ConstraintLayout不瞭解或者不會使用的,請檢視章節一的內容。若是有一定的瞭解,想深入對ConstraintLayout屬性的瞭解及效能的分