日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式案例Show
[導讀]在上一篇中,我們已經(jīng)完成了Framework層的JNI開發(fā),本篇我們在framework層實現(xiàn)一個LedTestService的服務(wù),并在service中調(diào)用Jni的函數(shù)接口。 Android內(nèi)有許多系統(tǒng)管理服務(wù),如 窗口管理服務(wù)WindowManagerService 電源管理服務(wù)PowerManagerService 通知管理服

ich_media_content " id="js_content">
center;align-items: center;" data-mid="" mpa-from-tpl="t">


在上一篇中,我們已經(jīng)完成了Framework層的JNI開發(fā),本篇我們在framework層實現(xiàn)一個LedTestService的服務(wù),并在service中調(diào)用Jni的函數(shù)接口。


Android內(nèi)有許多系統(tǒng)管理服務(wù),如

  • 窗口管理服務(wù)WindowManagerService

  • 電源管理服務(wù)PowerManagerService

  • 通知管理服務(wù)NotifacationManagerService

  • 電池管理服務(wù)BatteryManagerService等等

這些Manager提供了很多對系統(tǒng)層的控制接口。并且他們是由SystemServer在開機后啟動并管理的。自定義的服務(wù)加入后,也類似這些系統(tǒng)服務(wù),開機會自動啟動,并且也有同樣的上層的訪問接口。

添加一個自定義的系統(tǒng)服務(wù),需要按照service的框架要求實現(xiàn)以下幾步:


1、TestLedService服務(wù)






路徑:frameworks/base/services/core/java/com/android/server/TestLedService.java

package com.android.server;import android.content.Context;import android.util.Slog;import android.app.ITestLedService;import android.content.BroadcastReceiver;import android.app.ActivityManager;import android.content.ComponentName;import android.content.Intent;import android.content.IntentFilter;import android.os.SystemProperties;import android.content.pm.PackageManager;import java.io.BufferedReader;import java.io.IOException;import java.io.DataOutputStream;import java.io.DataInputStream;import java.io.InputStreamReader;import java.text.SimpleDateFormat;import java.util.Date;

public class TestLedService extends ITestLedService.Stub {private final Context mContext;private boolean mFlag;private boolean mled2On = false;private int mFlashDelay = 1000;

public TestLedService(Context context) {super();mContext = context;
testledinit_native();

mFlag = true;if(mFlag){new Thread(new led2Flash()).start();}}

public void SetLed1(int on){setled1_native(on);}

public void SetLed2(int delay){mFlashDelay = delay;if(!mFlag && mFlashDelay != 0){new Thread(new led2Flash()).start();}if(delay == 0){mFlag = false;}}

class led2Flash implements Runnable {public void run(){while(true){Slog.i("TestLed_service", "led2 flash");if(mled2On){setled2_native(0);mled2On = false;}else{setled2_native(1);mled2On = true;}try{Thread.sleep(mFlashDelay);}catch(Exception e){e.printStackTrace();}if(!mFlag){break;}}}}private static native boolean testledinit_native();private static native void setled1_native(int val);private static native void setled2_native(int val);}

TestLedService實現(xiàn)了兩個led的控制的函數(shù),SetLed1設(shè)置led1開與關(guān),setLed2設(shè)置led2的閃爍頻率。分別調(diào)用了JNI的函數(shù)setled1_native和setled2_native。



2、TestLedManager.java






路徑:frameworks/base/core/java/android/app/TestLedManager.java


package android.app;

import android.app.ITestLedService;import android.util.Slog;import android.os.RemoteException;

public class TestLedManager {

private final ITestLedService mService;

public TestLedManager(ITestLedService mService) {this.mService = mService;}

public void SetLed1(int on){try {mService.SetLed1(on);} catch (RemoteException ex) {ex.printStackTrace();}}

public void SetLed2(int delay){try {mService.SetLed2(delay);} catch (RemoteException ex) {ex.printStackTrace();}}}

Manager是APP和service通訊的橋梁,通過系統(tǒng)接口getSystemService,app獲取到該service的Manager。而在TestLedManager中就是將service內(nèi)實現(xiàn)的函數(shù)接口重新封裝了一下。



3、ITestLedService.aidl






路徑:frameworks/base/core/java/android/app/ITestLedService.aidl

package android.app;


// Declare any non-default types here with import statements

interface ITestLedService {/*** Demonstrates some basic types that you can use as parameters* and return values in AIDL.*/void SetLed1(int on);void SetLed2(int delay);}

TestLedService和TestLedManager在不同的進程,所以要考慮到進程通訊的問題。Manager通過增加一個aidl文件來描述通訊接口。



4、aidl加入編譯mk






路徑:frameworks/base/Android.mk

LOCAL_SRC_FILES += \……core/java/android/service/quicksettings/IQSTileService.aidl \core/java/android/app/ITestLedService.aidl \



5、Context.java新增服務(wù)名






路徑:frameworks/base/core/java/android/content/Context.java

public static final String TestLed_SERVICE="TestLed";



6、注冊服務(wù)






路徑:frameworks/base/core/java/android/app/SystemServiceRegistry.java

import android.app.TestLedManager;import android.app.ITestLedService;

final class SystemServiceRegistry {……static {……registerService(Context.TestLed_SERVICE, TestLedManager.class,new CachedServiceFetcher<TestLedManager>() {@Overridepublic TestLedManager createService(ContextImpl ctx) {IBinder b = ServiceManager.getService(Context.TestLed_SERVICE);ITestLedService service = ITestLedService.Stub.asInterface(b);return new TestLedManager(service);}});



7、啟動服務(wù)






路徑:frameworks/base/services/java/com/android/server/SystemServer.java


private void startOtherServices() {……TestLedService TestLed = new TestLedService(context);
ServiceManager.addService(Context.TestLed_SERVICE, TestLed);


8、seliunx相關(guān)






路徑:system/sepolicy/service.te

添加

type TestLed_service, system_api_service, system_server_service, service_manager_type;


路徑:system/sepolicy/service_contexts

添加

TestLed                                  u:object_r:TestLed_service:s0


編譯過程中會報錯,You have tried to change the API from what has been previously approved.是因為新增了系統(tǒng)api函數(shù),make update -api 后再次編譯即可。

燒錄進設(shè)備并啟動后,adb shell service list | grep TestLed *,就可看到新增的service已經(jīng)在運行了,就說明成功了。

掃碼關(guān)注我們

看更多嵌入式案例

center;font-size: 15px;box-sizing: border-box;" powered-by="xiumi.us" mpa-from-tpl="t">



喜歡本篇內(nèi)容請給我們點個再看

免責聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀

在這篇文章中,小編將對電源管理ic的相關(guān)內(nèi)容和情況加以介紹以幫助大家增進對它的了解程度,和小編一起來閱讀以下內(nèi)容吧。

關(guān)鍵字: 電源 ic 電源管理ic

本文中,小編將對中國ic設(shè)計公司予以介紹,如果你想對它的詳細情況有所認識,或者想要增進對它的了解程度,不妨請看以下內(nèi)容哦。

關(guān)鍵字: ic CPU 芯片

在這篇文章中,小編將為大家?guī)碇袊鴌c設(shè)計公司的相關(guān)報道。如果你對本文即將要講解的內(nèi)容存在一定興趣,不妨繼續(xù)往下閱讀哦。

關(guān)鍵字: ic 芯片

印度海得拉巴和馬薩諸塞州波士頓2022年4月20日 /美通社/ -- 全球領(lǐng)先的生命科學組織數(shù)據(jù)和分析提供商Excelra宣布,對價值和證據(jù)領(lǐng)域快速發(fā)展的年輕技術(shù)公...

關(guān)鍵字: ce

北京2022年4月11日 /美通社/ -- 亞馬遜云科技助力數(shù)據(jù)服務(wù)和管理平臺提供商Kyligence構(gòu)建企業(yè)級云原生大數(shù)據(jù)OLAP解決方案,使其云上交付速度提升30%。同時,通過加入“ISV(獨立軟件供應(yīng)商)加速贏計劃...

關(guān)鍵字: ce ge 進程

(全球TMT2022年4月11日訊)亞馬遜云科技助力數(shù)據(jù)服務(wù)和管理平臺提供商Kyligence構(gòu)建企業(yè)級云原生大數(shù)據(jù)OLAP解決方案,使其云上交付速度提升30%。同時,通過加入“ISV(獨立軟件供應(yīng)商)加速贏計劃”,K...

關(guān)鍵字: 亞馬遜 ge ce

(全球TMT2022年4月7日訊)為Microsoft Dynamics 365和Salesforce提供云端配置、價格、報價(CPQ)和文檔自動化軟件的供應(yīng)商Experlogix宣布與Microsoft Dynami...

關(guān)鍵字: ce Dynamics logix

(全球TMT2022年3月28日訊)Super Micro Computer, Inc. (SMCI) 宣布將支持NVIDIA最新的軟件和硬件版本。Supermicro的NVIDIA認證服務(wù)器和工作站經(jīng)過驗證...

關(guān)鍵字: ni ic Enterprise

面向供電行業(yè)的革命性交鑰匙解決方案,可提高系統(tǒng)可靠性和電網(wǎng)彈性 伊利諾伊州博林布魯克2022年3...

關(guān)鍵字: 輸電線路 ic

2021年全年多項業(yè)績指標再創(chuàng)新高; “企業(yè)數(shù)字化運營解決方案”全年收入持續(xù)三位數(shù)同比增長; “SaaS+X”商業(yè)模式為“企業(yè)數(shù)字化運營解決方案”的迅猛增長...

關(guān)鍵字: ic ck
關(guān)閉