<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                在Android應用程序框架層開發硬件訪問服務的目的是為了讓上層的Android應用程序能夠訪問對應的硬件設備。在本節中,我們將在Android源代碼工程環境中開發一個應用程序Freg,它通過硬件訪問服務FregService來訪問虛擬硬件設備freg的寄存器val的值。 由于這個應用程序是實驗性質的,因此,我們將它放在packages/experimental目錄中,對應的工程為Freg。它的目錄結構如下: ~~~ ~/Android/packages/experimental/Freg ----AndroidManifest.xml ----Android.mk ----src ----shy/luo/freg ----Freg.java ----res ----layout ----main.xml ----values ----strings.xml ----drawable ----icon.png ~~~ 它包含一個源代碼目錄src、一個資源目錄res、一個配置文件AndroidManifest.xml和一個編譯腳本文件Android.mk。下面我們就分別介紹每一個文件的內容。 **Freg.java** ~~~ package shy.luo.freg; import android.app.Activity; import android.os.ServiceManager; import android.os.Bundle; import android.os.IFregService; import android.os.RemoteException; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class Freg extends Activity implements OnClickListener { private final static String LOG_TAG = "shy.luo.freg.FregActivity"; private IFregService fregService = null; private EditText valueText = null; private Button readButton = null; private Button writeButton = null; private Button clearButton = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); fregService = IFregService.Stub.asInterface( ServiceManager.getService("freg")); valueText = (EditText)findViewById(R.id.edit_value); readButton = (Button)findViewById(R.id.button_read); writeButton = (Button)findViewById(R.id.button_write); clearButton = (Button)findViewById(R.id.button_clear); readButton.setOnClickListener(this); writeButton.setOnClickListener(this); clearButton.setOnClickListener(this); Log.i(LOG_TAG, "Freg Activity Created"); } @Override public void onClick(View v) { if(v.equals(readButton)) { try { int val = fregService.getVal(); String text = String.valueOf(val); valueText.setText(text); } catch (RemoteException e) { Log.e(LOG_TAG, "Remote Exception while reading value from freg service."); } } else if(v.equals(writeButton)) { try { String text = valueText.getText().toString(); int val = Integer.parseInt(text); fregService.setVal(val); } catch (RemoteException e) { Log.e(LOG_TAG, "Remote Exception while writing value to freg service."); } } else if(v.equals(clearButton)) { String text = ""; valueText.setText(text); } } } ~~~ 文件定義了一個Activity組件Freg,它是應用程序Freg的主界面。在Activity組件Freg的界面上,有一個編輯框和三個按鈕Read、Write和Clear,其中,編輯框用來顯示或者輸入虛擬硬件設備freg的寄存器val的值;按鈕Read和Write分別用來讀寫虛擬硬件設備freg的寄存器val,而按鈕Clear用來清空編輯框。 在Activity組件Freg的成員函數onCreate中,第30行通過Service Manager獲得一個名稱為“freg”的服務的Binder代理對象接口。從2.4.4小節的內容可以知道,這個服務就對應于運行在系統進程System中的硬件訪問服務FregService。因此,第29行就可以安全地將這個Binder代理對象接口轉換為一個FregService代理對象接口,并且保存在Activity組件Freg的成員變量fregService中。有了這個FregService代理對象接口之后,應用程序Freg就可以通過調用它的成員函數setVal和getVal來訪問虛擬硬件設備freg的寄存器val的值了,如Activity組件Freg的成員函數onClick所示。 **main.xml** ~~~ <!--?xml version="1.0" encoding="utf-8"?--> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <linearlayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center"> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/value"> </textview> <edittext android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/edit_value" android:hint="@string/hint"> </edittext> </linearlayout> <linearlayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center"> <button android:id="@+id/button_read" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/read"> </button> <button android:id="@+id/button_write" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/write"> </button> <button android:id="@+id/button_clear" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/clear"> </button> </linearlayout> </linearlayout> ~~~ 這是應用程序Freg的主界面配置文件,在屏幕中顯示一個TextView控件和三個Button控件。 **strings.xml** ~~~ <!--?xml version="1.0" encoding="utf-8"?--> <resources> <string name="app_name">Freg</string> <string name="value">Value</string> <string name="hint">Please input a value...</string> <string name="read">Read</string> <string name="write">Write</string> <string name="clear">Clear</string> </resources> ~~~ 這是應用程序Freg的字符串資源文件,定義了在應用程序中使用到的各個字符串。 **icon.png** 這是應用程序Freg的圖標文件,可以根據需要來放置不同的圖片文件。 **AndroidManifest.xml** ~~~ <!--?xml version="1.0" encoding="utf-8"?--> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="shy.luo.freg" android:versioncode="1" android:versionname="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".Freg" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN"> </action> <category android:name="android.intent.category.LAUNCHER"> </category> </intent-filter> </activity> </application> </manifest> ~~~ 這是應用程序Freg的配置文件,由于應用程序Freg定義了一個Activity組件Freg,因此,要在這個配置文件中對它進行配置。 **Android.mk** ~~~ LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := $(call all-subdir-java-files) LOCAL_PACKAGE_NAME := Freg include $(BUILD_PACKAGE) ~~~ 這是應用程序Freg的編譯腳本文件,指定程序的名稱為“Freg”。 在應用程序Freg的各個文件都準備好以后,就可以對它進行編譯和打包了。 ~~~ USER@MACHINE:~/Android$ mmm ./packages/experimental/Freg/ USER@MACHINE:~/Android$ make snod ~~~ 打包后得到的Android系統鏡像文件system.img就包含有應用程序Freg了。 最后,我們使用這個新的Android系統鏡像文件system.img來啟動Android模擬器。 ~~~ USER@MACHINE:~/Android$ emulator -kernel kernel/goldfish/arch/arm/boot/zImage ~~~ Android模擬器運行起來之后,我們就可以在應用程序啟動器中啟動應用程序Freg了,它的界面如圖2-2所示。 ![應用程序Freg的界面](https://box.kancloud.cn/e6528a503228e46f171aeb34f24ed460_795x565.png =795x565) 應用程序Freg啟動起來之后,通過點擊Read按鈕,就可以通過硬件訪問服務FregService來讀取虛擬硬件設備freg的寄存器val的內容了,而通過在編輯框中輸入一個整數值,并且點擊Write按鈕,就可以通過硬件訪問服務FregService將這個整數值寫入到虛擬硬件設備freg的寄存器val中了。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看