安卓10源码开发定制(24)framework层自定义系统服务开发(1)Android Studio创建自定义系统服务

安卓10源码开发定制(24)framework层自定义系统服务开发(1)Android Studio创建自定义系统服务,第1张

概述文章首发微信公众号:QDROID88888,如果感兴趣可以关注一下公众号。前言  本文将实现读取"/sys/classet/wlan0/address"文件的方式获取wifimac为例实现在安卓10源码中添加framework层自定义系统服务。  安卓10中由于普通App直读取取"/sys/classet/wlan0/address"

文章首发微信公众号:QDROID88888,如果感兴趣可以关注一下公众号。

前言

    本文将实现读取"/sys/class/net/wlan0/address"文件的方式获取wifi mac为例实现在安卓10源码中添加framework层自定义系统服务

    安卓10中由于普通App直读取取"/sys/class/net/wlan0/address"

文件获取wifi mac失败。然而添加系统服务读取可以读取成功,主要是由于安卓10的安全机制中限制了普通app不能读取"/sys/class/net/wlan0/address"文件获取wifi mac。

    本文将参考LocationManagerService的实现方式,仿照写一个GetWifiMacService来实现获取wifi mac。

   后续将以三篇文章完整实战 *** 作讲述framework层添加自定义系统服务的过程。

 

AndroID Studio开发自定义系统服务

    本文使用的AndroID Studio版本4.1.1。

1.创建GetWifiMacService工程

   图1选择创建工程:

 

  图2选择工程模板:


图3配置工程信息:

 

图4创建工程成功:

 

2.创建IGetWifiMacInterface.aIDl文件

    依次按照如下 *** 作:

图1:

 

图2:

图3:

 

图3:

 

2.创建GetWifiMacServiceManager

     

按照如下图所示的地方创建对应的GetWifiMacServiceManager文件:

 

GetWifiMacServiceManager完整实现代码如下:

package androID.wifIEx;import androID.content.Context;import androID.os.remoteexception;public class GetWifiMacServiceManager {    private final IGetWifiMacInterface mService;    private Context mContext;    GetWifiMacServiceManager(Context context,IGetWifiMacInterface service){        mContext = context;        mService = service;    }    public  String  getWifiMac(){        try{            return mService.getWifiMac();        }catch (remoteexception ex){        }        return null;    }}

   

3.创建GetWifiMacService

    在安卓系统中各种java层系统服务文件主要放在源码路径"/frameworks/base/services/core/java/com/androID/server/"下面,为了后面直接将创建的服务拷贝过去,在AndroID Studio创建的GetWifiMacService服务的源文件包名以"com.androID.server"为前缀。按照以下依次创建GetWifiMacService服务的源代码文件。

 图1:

  最好提前rebuild一下工程,使aIDl文件生成对应的java文件。

GetMacService完整实现代码如下:

package com.androID.server.wifIEx;import androID.os.Binder;import androID.os.remoteexception;import androID.util.Log;import androID.wifIEx.IGetWifiMacInterface;import java.io.BufferedReader;import java.io.file;import java.io.fileinputStream;import java.io.inputStreamReader;public class GetWifiMacService extends IGetWifiMacInterface.Stub{    private static  final String TAG=GetWifiMacService.class.getSimplename();    @OverrIDe    public String getWifiMac() throws remoteexception {        Log.d(TAG,"getWifiMac call for pID:"+ Binder.getCallingPID()+" uID:"+Binder.getCallingUID());        return getWifiMacFromfile();    }   //获取wifi mac    private String  getWifiMacFromfile(){        String mypath="/sys/class/net/wlan0/address";        String line = "";        try {            BufferedReader bufferedReader = new BufferedReader(new inputStreamReader(new fileinputStream(new file(mypath))));            line = bufferedReader.readline();            if(line==null)            {                line="";            }            bufferedReader.close();        }catch (Exception eeee)        {        }        return line;    }}

 

总结

  创建aIDl文件的时候先创建好包名,然后再指定包名下面右键菜单去新建aIDl文件。AndroID Studio会自动生成aIDl目录以及对应包名的aIDl文件。

创建系统服务源文件之前最好rebuild一下工程,使AndroID Studio自动生成aIDl文件对应的java文件。不然创建的系统服务类继承的时候找不到如IGetWifMacInterface.Stub的类。

 


 

总结

以上是内存溢出为你收集整理的安卓10源码开发定制(24)framework层自定义系统服务开发(1)Android Studio创建自定义系统服务全部内容,希望文章能够帮你解决安卓10源码开发定制(24)framework层自定义系统服务开发(1)Android Studio创建自定义系统服务所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1046702.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存