其他
安卓10源码学习开发定制(24)framework层自定义系统服务开发(1)Android Studio创建自定义系统服务
前言
Android Studio开发自定义系统服务
图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的类。
扫描下方二维码关注公众号