Android底層系統服務開發:以MediaRecorder模組為例

此範例是在Android裡添增了一個MediaRecorder的服務,讓Android的Java層應用軟體能呼叫MediaRecorder服務而進行錄音的工作。MediaRecorder服務的主要架構圖(由韓超先生所提供)如下:

圖 1

在Android裡已經有一個MediaPalyerService類別了。就是上圖1裡的:

圖 2

在這個MediaPalyerService類別裡添加一個內部(Inner)類別:MediaRecorderClient類別,如下圖:

圖 3

於是,這個擴充之後的MediaPalyerService類別就能提供錄音的服務了。為什麼這麼地簡單呢?因為他把錄音工作委託給幕後的OpenCodeAuthor,由它配合硬件來進行真正的錄音工作。如下圖:

圖 4

很多人會問到:既然有OpenCodeAuthor模組來進行錄音工作,為何還需要MediaPalyerService及其內含的MediaRecorderClient類別呢?

其原因是:MediaPalyerService及其內含的MediaRecorderClient類別才具有遠距(即跨進程的IPC溝通)服務的能力。為了進行遠距服務,所以MediaPalyerService原來就提供了IMediaPlayerService介面(內包IBinder標準IPC介面)來給遠距的組件使用。由於C++沒有Interface機制,所以使用繼承來實現介面之角色。

圖 5

上圖所敘述的IMediaPlayerService介面,是原來就有的,它提供播音的服務,但沒有錄音服務。因此,韓先生替MediaRecorderClient類別定義了IMediaRecorder介面,讓遠距的模組能透過此介面而使用MediaRecorderClient類別的錄音服務。如下圖:

圖 6

寫完了MediaRecorderClient類別,也提供了IMediaRecorder介面之後,系統層級(System-level)的錄音服務就算完成了。

此時,你很容易想到一個問題:Java層級的類別(如Activity或Service等)如何使用這個MediaRecorderClient類別服務呢? 於是,韓先生在撰寫一個mediarecorder類別(是C++類別),來遠距使用MediaRecorderClient類別的服務。

圖 7

然後,Java類別就能透過JNI介面來呼叫mediarecorder類別的函數,進而使用到MediaRecorderClient類別的服務了。其JNI介面如下圖:

圖 8

此時,你很可能會繼續問到:寫好了MediaRecorderClient類別的服務之後,何時(When)安裝到Android執行環境裡呢?其答案是:當Android進行其系統啟動過程時,會執行MediaPalyerService類別的Instantiate()函數,透過天字第一號服務(即ServiceManager)來將此MediaPalyerService服務登錄到Binder Driver裡,成為一項可被遠距綁定(bind)的系統服務。

一旦系統啟動完成了,MediaPalyerService服務也登錄完成了。就可以執行Java層級的應用類別了,例如Java層級的Activity類別就能透過JNI介面而要求VM(Virtual Machine)去載入(load)共享類別庫(*.SO)裡的mediarecorder類別,進而遠距使用到已登錄的MediaPalyerService服務了。◆

更多相关文章

  1. Android(安卓)渗透测试学习手册 第四章 对 Android(安卓)设备进
  2. 图解 Android(安卓)动画中 android:pivotX 和 android:pivotY 属
  3. Android(安卓)Studio 基础 之 如何取消使用 Android(安卓)X 的操
  4. 使用Panel和TextLine模拟Android的Toast
  5. Android学习手记:第一个应用程序!
  6. Android(安卓)Dialog使用举例
  7. Android:使用JDBC链接MySQL数据库
  8. Android中使用Handler机制更新UI的两种方法
  9. android --相机使用详解概述

随机推荐

  1. 360buy android 首页打开网络监控数据分
  2. 谈谈IPC
  3. Android(安卓)Studio 出现Error:Connecti
  4. Android(安卓)File
  5. Android开发工具--adb的使用
  6. Android 优秀的开源库
  7. Android动态布局,并动态为TextView控件设
  8. Android计算图片占用内存
  9. Android(安卓)Material Design之Navigati
  10. Android开发者指南(3) ―― Other Tools