Android盒子开发,网络信息的获取,比手机要困难许多。比如我们要获取网卡地址,IP地址,MAC等,有的系统没有直接接口
盒子的Launcher中需要接管便携式WIFI热点的开启,那么就需要获取SSID,为了保证我们Launcher中获取的SSID和系统一致。
说多了,都是泪啊。
热点的信息存放在/data/misc/wifi/hostapd.conf文件下,首先我想到的是使用IO流去读取,但是没有Root权限是无法读取的,于是乎想了一个更新坑爹的方法,自己修改该文件的权限,具体代码如下
**
* @author xiongchengguang
* @ClassName ReadConfig
* @Descripton 读取WIFI热点的名字
* @date 2016年2月29日下午3:16:23
*/
public class ReadConfig {
private static final String TAG = "ReadConfig";
public static String loadFileAsString() {
getRootPermission();
StringBuffer sb = new StringBuffer();
String ssid ="";
try {
BufferedReader reader = new BufferedReader(new FileReader("/data/misc/wifi/hostapd.conf"));
char[] buf = new char[8192];
int len = 0;
while ((len = reader.read(buf)) != -1) {
String str = String.valueOf(buf, 0, len);
sb.append(str);
}
reader.close();
int index=sb.toString().indexOf("ssid")+5;
int end=sb.toString().indexOf("channel");
ssid=sb.toString().substring(index, end);
} catch (Exception e) {
e.printStackTrace();
}
Log.d(TAG, ssid);
return ssid;
}
/**
* 修改系统文件权限
*/
private static void getRootPermission(){
Process process;
DataOutputStream dataOutputStream;
try {
String cmd1="chmod 777 /data";
String cmd2="chmod 777 /data/misc/";
String cmd3="chmod 777 /data/misc/wifi/";
String cmd4="chmod 777 /data/misc/wifi/hostapd.conf";
process=Runtime.getRuntime().exec("su");
dataOutputStream=new DataOutputStream(process.getOutputStream());
dataOutputStream.writeBytes(cmd1+"\n");
dataOutputStream.writeBytes(cmd2+"\n");
dataOutputStream.writeBytes(cmd3+"\n");
dataOutputStream.writeBytes(cmd4+"\n");
dataOutputStream.writeBytes("exit\n");
dataOutputStream.flush();
process.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
}
}
但是这样就会出现一个问题,有的时候能读取到,有的时候不行的。这样程序丢给用户有损我天朝的程序员的脸面啊
脑门一拍,把Setting的源码打开看看不就好了吗
那我们来看下别人具体实现,这不正是系统设置的UI布局吗上面一个TextVie用户,下面一个EditText输入框吗
那我们下面开始使用上面的id来全局搜索 (Ctrl+H ->wifi_ap_dialog)
/**
* Dialog to configure the SSID and security settings
* for Access Point operation
*/
public class WifiApDialog extends AlertDialog implements View.OnClickListener,
TextWatcher, AdapterView.OnItemSelectedListener {
static final int BUTTON_SUBMIT = DialogInterface.BUTTON_POSITIVE ;
private final DialogInterface.OnClickListener mListener;
public