Android MediaScannerJNI原始碼具體解釋

來源:互聯網
上載者:User

標籤:object   work   技術   over   ota   dir   技術分享   oid   auto   

1.簡單介紹

MediaScannerJNI的在MediaScanner中的地位可參考
Android MediaScanner 總綱
MediaScanner JNI檔案名稱:
android_media_MediaScanner.cpp
位置:
frameworks\base\media\jni\android_media_MediaScanner.cpp
android_media_MediaScanner是JAVA層和server層溝通的一個橋樑

android_media_MediaScanner中有一個MyMediaScannerClient是一個調用JAVA層android/media/MediaScannerClient的入口是Native層想java層通訊的橋樑。

Created with Rapha?l 2.1.0(java)MediaScanner(java)MediaScanner(native)android_media_MediaScanner(native)android_media_MediaScanner(C++)MediaScanner(C++)MediaScannermedia_jniMyMediaScannerClient2. 初始化

在MediaScanner.java初始化中程序呼叫,其核心是建立了一個StagefrightMediaScanner

static {        System.loadLibrary("media_jni");        native_init();    }    public MediaScanner(Context c) {        native_setup();        ......    }

native_init 相應 android_media_MediaScanner_native_init
native_setup相應android_media_MediaScanner_native_setup

static voidandroid_media_MediaScanner_native_setup(JNIEnv *env, jobject thiz){    ALOGV("native_setup");    MediaScanner *mp = new StagefrightMediaScanner;    ......    env->SetLongField(thiz, fields.context, (jlong)mp);}
3. android_media_MediaScanner_processDirectory

調用MediaScanner.cpp實現processDirectory完畢工作
在MediaScanner.java中調用scanDirectories。詳見Android MediaScanner源碼解析 第6節
其功能還是通過MediaScanner.cpp的processDirectory實現對

static voidandroid_media_MediaScanner_processDirectory(        JNIEnv *env, jobject thiz, jstring path, jobject client){    MediaScanner *mp = getNativeScanner_l(env, thiz);    .......    const char *pathStr = env->GetStringUTFChars(path, NULL);    MyMediaScannerClient myClient(env, client);    MediaScanResult result = mp->processDirectory(pathStr, myClient);    env->ReleaseStringUTFChars(path, pathStr);}
4. android_media_MediaScanner_processFile

調用StageFrightMediaScanner.cpp實現processFile完畢工作

static voidandroid_media_MediaScanner_processFile(        JNIEnv *env, jobject thiz, jstring path,        jstring mimeType, jobject client){    // Lock already hold by processDirectory    MediaScanner *mp = getNativeScanner_l(env, thiz);    const char *pathStr = env->GetStringUTFChars(path, NULL);    const char *mimeTypeStr =        (mimeType ?

env->GetStringUTFChars(mimeType, NULL) : NULL); ........ MyMediaScannerClient myClient(env, client); MediaScanResult result = mp->processFile(pathStr, mimeTypeStr, myClient);}

5. MyMediaScannerClient

引用android/media/MediaScannerClient中scanFile。handleStringTag。 setMimeType三個介面

        jclass mediaScannerClientInterface =                env->FindClass(kClassMediaScannerClient);        if (mediaScannerClientInterface == NULL) {            ALOGE("Class %s not found", kClassMediaScannerClient);        } else {            mScanFileMethodID = env->GetMethodID(                                    mediaScannerClientInterface,                                    "scanFile",                                    "(Ljava/lang/String;JJZZ)V");            mHandleStringTagMethodID = env->GetMethodID(                                    mediaScannerClientInterface,                                    "handleStringTag",                                    "(Ljava/lang/String;Ljava/lang/String;)V");            mSetMimeTypeMethodID = env->GetMethodID(                                    mediaScannerClientInterface,                                    "setMimeType",                                    "(Ljava/lang/String;)V");        }

Android MediaScannerJNI原始碼具體解釋

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.