文章首发微信公众号: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创建自定义系统服务所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)