android APK应用层到kernel层功能接口调用实现总结

android APK应用层到kernel层功能接口调用实现总结

一.问题现象及背景:

客户有个需求需要在上层apk中控制手机上的VMIC、SPK、RAY_LED、OTG、SWITCH、PTT_SWITCH、PTT_PD、BULE_LED、KEYPAD_LED等按键、音频、镭射、OTG、灯的功能切换。其中部分功能是该手机上新增的功能,android原生系统上没有提供相关的接口,因此需要在原生系统框架上增加相关接口,实现APK应用中控制手机上的这些功能。

主要参考原生系统上APK到kernel层接口的调用框架实现,下面以该功能主要代码实现来简述APK应用层到kernel层功能接口调用实现。

 

二.主要代码实现:

   1. apk应用主要代码实现

a. 文件packages\K508Control\src\com\android\tmptest\Test.java

 

package com.android.tmptest;

import android.content.Intent; 

importandroid.content.SharedPreferences; 

import android.os.Bundle; 

importandroid.preference.CheckBoxPreference; 

importandroid.preference.EditTextPreference; 

importandroid.preference.ListPreference; 

importandroid.preference.Preference; 

importandroid.preference.PreferenceActivity; 

importandroid.preference.PreferenceManager; 

importandroid.preference.PreferenceScreen; 

importandroid.preference.Preference.OnPreferenceClickListener; 

import android.util.Log; 

 

//importcom.android.server.K508ControlService;

import android.os.IK508ControlService; 

import android.os.ServiceManager;

 

public class Test extendsPreferenceActivity implements

         Preference.OnPreferenceClickListener,

         Preference.OnPreferenceChangeListener{ 

        

         privatePreference mPreference_VMIC;

         privatePreference mPreference_SPK;

         privatePreference mPreference_RAY;

         privatePreference mPreference_OTG;

         privatePreference mPreference_SWITCH;

         privatePreference mPreference_PTT_SWITC;

         privatePreference mPreference_PTT_PD;

         privatePreference mPreference_BULE;

         privatePreference mPreference_KEYPAD;

 

         privateIK508ControlService k508Service = null; 

 

         @Override

         publicvoid onCreate(Bundle savedInstanceState)

         {

            super.onCreate(savedInstanceState);          

            Log.d("zhengconglong","onCreate");

            addPreferencesFromResource(R.xml.tp_test);

           

            mPreference_VMIC =(Preference)findPreference("K508_IOC_VMIC_EN");

            mPreference_SPK =(Preference)findPreference("K508_IOC_SPK_EN");

            mPreference_RAY =(Preference)findPreference("K508_IOC_RAY_LED_EN");

            mPreference_OTG =(Preference)findPreference("K508_IOC_OTG_EN");

            mPreference_SWITCH =(Preference)findPreference("K508_IOC_SWITCH_EN");

            mPreference_PTT_SWITC =(Preference)findPreference("K508_IOC_PTT_SWITCH_EN");

            mPreference_PTT_PD =(Preference)findPreference("K508_IOC_PTT_PD");

            mPreference_BULE =(Preference)findPreference("K508_IOC_BULE_LED_EN");

            mPreference_KEYPAD =(Preference)findPreference("K508_IOC_KEYPAD_LED_EN");

           

            mPreference_VMIC.setOnPreferenceClickListener(this);

            mPreference_SPK.setOnPreferenceClickListener(this);

            mPreference_RAY.setOnPreferenceClickListener(this);

            mPreference_OTG.setOnPreferenceClickListener(this);

            mPreference_SWITCH.setOnPreferenceClickListener(this);

             mPreference_PTT_SWITC.setOnPreferenceClickListener(this);

            mPreference_PTT_PD.setOnPreferenceClickListener(this);     

            mPreference_BULE.setOnPreferenceClickListener(this);

            mPreference_KEYPAD.setOnPreferenceClickListener(this);

           

            SharedPreferencesshp = PreferenceManager.getDefaultSharedPreferences(this); 

                  

                   k508Service= IK508ControlService.Stub.asInterface(ServiceManager.getService("K508Control"));

         }       

                  

         @Override

         protectedvoid onResume() {           

                   super.onResume();          

         }

 

         @Override

         protectedvoid onPause() {

                   super.onPause();              

         }

        

         publicboolean setSummary(Preference pf) {

            if(pf.getSummary().equals("false")){

                      pf.setSummary("true");

                      return true;

            }else{

                      pf.setSummary("false");

                      return false;

            }       

         }

 

         @Override

   public boolean onPreferenceClick(Preference preference) {

            

//               Log.d("zhengconglong","onPreferenceClick");

       if (preference == mPreference_VMIC) {

//             Log.d("zhengconglong","111111");

                if(setSummary(mPreference_VMIC)){

                     //mPreference_VMIC on

                     try {

                            k508Service.setVal(0,1);

                                     }catch (Throwable e) {    

                                             Log.d("k508ServicemPreference_VMIC", "error");

                                     }

                                     Log.d("k508ServicemPreference_VMIC", "on");

                } else {

                           //mPreference_VMIC off

                           try {

                                  k508Service.setVal(0,0);

                                     }catch (Throwable e) {    

                                             Log.d("k508ServicemPreference_VMIC", "error");

                                     }       

                                      Log.d("k508ServicemPreference_VMIC", "off");

                }

//             Log.d("zhengconglong","K508_IOC_VMIC_EN");

       }else if(preference.getKey().equals("K508_IOC_SPK_EN")) {

//             Log.d("zhengconglong","22222");

                if(setSummary(mPreference_SPK)){

                                     try{

                     k508Service.setVal(1,1);

                                     }catch (Throwable e) {    

                                             Log.d("k508ServiceK508_IOC_SPK_EN", "error");

                                     }

                                     Log.d("k508ServicemPreference_SPK", "on");      

                         

            } else {

                     try{

                     k508Service.setVal(1,0);

                                     }catch (Throwable e) {    

                                             Log.d("k508ServiceK508_IOC_SPK_EN", "error");

                                     }

                                      Log.d("k508Service mPreference_SPK","off");                       

            }

       }else if(preference.getKey().equals("K508_IOC_RAY_LED_EN")) {

                if(setSummary(mPreference_RAY)){

                                     try{

                                               k508Service.setVal(2,1);

                                     }catch (Throwable e) {    

                                             Log.d("k508ServiceK508_IOC_RAY_LED_EN", "error");

                                     }

                                     Log.d("k508ServiceK508_IOC_RAY_LED_EN", "on");

            } else {

                     try{

                                               k508Service.setVal(2,0);

                                     }catch (Throwable e) {    

                                               Log.d("k508ServiceK508_IOC_RAY_LED_EN", "error");

                                     }

                                     Log.d("k508ServiceK508_IOC_RAY_LED_EN", "off");                      

            }

       }else if(preference.getKey().equals("K508_IOC_OTG_EN")) {

                if(setSummary(mPreference_OTG)){

                                     try{

                                               k508Service.setVal(3,1);

                                     }catch (Throwable e) {    

                                               Log.d("k508ServiceK508_IOC_OTG_EN", "error");

                                     }

                                     Log.d("k508ServiceK508_IOC_OTG_EN", "on");

            } else {

                     try{

                                               k508Service.setVal(3,0);

                                     }catch (Throwable e) {    

                                               Log.d("k508ServiceK508_IOC_OTG_EN", "error");

                                     }

                                     Log.d("k508ServiceK508_IOC_OTG_EN", "off");                    

            }

       }else if(preference.getKey().equals("K508_IOC_SWITCH_EN")) {

                 if(setSummary(mPreference_SWITCH)){

                                     try{

                                               k508Service.setVal(4,1);

                                     }catch (Throwable e) {    

                                               Log.d("k508ServiceK508_IOC_SWITCH_EN", "error");

                                     }

                                     Log.d("k508ServiceK508_IOC_SWITCH_EN", "on");

            } else {

                     try{

                                               k508Service.setVal(4,0);

                                     }catch (Throwable e) {    

                                               Log.d("k508ServiceK508_IOC_SWITCH_EN", "error");

                                     }

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值