Android(安卓)HAL实现的三种方式(3) - 基于Manager的HAL设计
16lz
2021-01-24
- packagemokoid.hardware;
- interfaceILedService
- {
- booleansetOn(intled);
- booleansetOff(intled);
- }
- publicclassLedManager
- {
- privatestaticfinalStringTAG="LedManager";
- privateILedServicemLedService;
- publicLedManager(){
- mLedService=ILedService.Stub.asInterface(
- ServiceManager.getService("led"));
- if(mLedService!=null){
- Log.i(TAG,"TheLedManagerobjectisready.");
- }
- }
- publicbooleanLedOn(intn){
- booleanresult=false;
- try{
- result=mLedService.setOn(n);
- }catch(RemoteExceptione){
- Log.e(TAG,"RemoteExceptioninLedManager.LedOn:",e);
- }
- returnresult;
- }
- publicbooleanLedOff(intn){
- booleanresult=false;
- try{
- result=mLedService.setOff(n);
- }catch(RemoteExceptione){
- Log.e(TAG,"RemoteExceptioninLedManager.LedOff:",e);
- }
- returnresult;
- }
- }
- publicfinalclassLedServiceextendsILedService.Stub{
- static{
- System.load("/system/lib/libmokoid_runtime.so");
- }
- publicLedService(){
- Log.i("LedService","GotogetLEDStub...");
- _init();
- }
- /*
- *MokoidLEDnativemethods.
- */
- publicbooleansetOn(intled){
- Log.i("MokoidPlatform","LEDOn");
- return_set_on(led);
- }
- publicbooleansetOff(intled){
- Log.i("MokoidPlatform","LEDOff");
- return_set_off(led);
- }
- privatestaticnativeboolean_init();
- privatestaticnativeboolean_set_on(intled);
- privatestaticnativeboolean_set_off(intled);
- }
- publicclassLedSystemServerextendsService{
- @Override
- publicIBinderonBind(Intentintent){
- returnnull;
- }
- publicvoidonStart(Intentintent,intstartId){
- Log.i("LedSystemServer","StartLedService...");
- /*PleasealsoseeSystemServer.javaforyourinterests.*/
- LedServicels=newLedService();
- try{
- ServiceManager.addService("led",ls);
- }catch(RuntimeExceptione){
- Log.e("LedSystemServer","StartLedServicefailed.");
- }
- }
- }
- publicclassLedTestextendsActivityimplementsView.OnClickListener{
- privateLedManagermLedManager=null;
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- //StartLedServiceinaseperatedprocess.
- startService(newIntent("com.mokoid.systemserver"));
- Buttonbtn=newButton(this);
- btn.setText("ClicktoturnLED1On");
- btn.setOnClickListener(this);
- setContentView(btn);
- }
- publicvoidonClick(Viewv){
- //GetLedManager.
- if(mLedManager==null){
- Log.i("LedTest","CreatanewLedManagerobject.");
- mLedManager=newLedManager();
- }
- if(mLedManager!=null){
- Log.i("LedTest","GotLedManagerobject.");
- }
- /**CallmethodsinLedServiceviaproxyobject
- *whichisprovidedbyLedManager.
- */
- mLedManager.LedOn(1);
- TextViewtv=newTextView(this);
- tv.setText("LED1isOn.");
- setContentView(tv);
- }
- }
更多相关文章
- Android(安卓)Gallery控件使用方法详解
- Android(安卓)应用程序开关GPS
- Android(安卓)应用程序开发环境搭建说明
- android自学笔记《四》——应用程序结构分析
- Android(安卓)开发自定义使用svg构造交互式中国(各国)地图
- Android(安卓)MVP模式中,单个Activity/Fragment如何对应多个VP
- Android中快速实现自定义字体!
- Android服务器端开发
- 一步一步学android之布局管理器——FrameLayout