Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 從硬件到應用:一步一步向上爬 5 -- 在Frameworks層添硬件服務

Android 從硬件到應用:一步一步向上爬 5 -- 在Frameworks層添硬件服務

編輯:關於Android編程

Android Frameworks層提供了硬件服務,Android系統APP可以調用這些硬件服務,進而完成硬件的控制,實現應有的功能。接著上一篇,這一篇要在frameworks層為應用提供java接口的硬件服務。cd到frameworks/base/core/java/android/os目錄,添加 IGpioService.aidl:

package android.os;  

interface IGpioService {  
void setVal(int val);  
int getVal();  
}  
我們通過setVal去設置LED的亮滅,getVal一直是省略的

打開frameworks/base下的Android.mk,修改LOCAL_SRC_FILES,增加:

	core/java/android/os/IGpioService.aidl \
編譯IGpioService.aidl接口:(成功編譯源碼前提下)

mmm frameworks/base

生成:

Install: out/target/product/generic/system/framework/framework.odex
Install: out/target/product/generic/system/framework/framework.jar
成功後cd到frameworks/base/services/java/com/android/server目錄,添加GpioService.java文件:

package com.android.server;  
import android.content.Context;  
import android.os.IGpioService;  
import android.util.Slog;  

public class GpioService extends IGpioService.Stub {  
	private static final String TAG = "GpioService";  
	GpioService() {  
	    init_native();  
	}  
	public void setVal(int val) {  
	    setVal_native(val);  
	}     
	public int getVal() {  
	    return getVal_native();  
	}  
	  
	private static native boolean init_native();  
	private static native void setVal_native(int val);  
	private static native int getVal_native();  
};  
修改當前目錄下的SystemServer.java文件,在ServerThread::run中增加GpioService:

            try {
                Slog.i(TAG, "Recognition Service");
                recognition = new RecognitionManagerService(context);
            } catch (Throwable e) {
                reportWtf("starting Recognition Service", e);
            }

            try {
                Slog.i(TAG, "DiskStats Service");
                ServiceManager.addService("diskstats", new DiskStatsService(context));
            } catch (Throwable e) {
                reportWtf("starting DiskStats Service", e);
            }

            try {
                Slog.i(TAG, "Gpio Service");
                ServiceManager.addService("gpio", new GpioService());
            } catch (Throwable e) {
                Slog.e(TAG, "Failure starting Gpio Service", e);
            }
編譯GpioService:

mmm frameworks/base/services/java

生成:

Install: out/target/product/generic/system/framework/services.odex
Install: out/target/product/generic/system/framework/services.jar
Frameworks層已經包含了我們編寫的硬件服務,應用程序可以通過這些java接口訪問硬件服務。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved