对动态添加TextView进一步详细,通过获取到的MAC、SN、Android ID值填充至values。
增加MacSn类
public class MacSn {
/////////////////////////////////////////////////////////////////////////////////////////////////////
//获取MAC
private static final String ACTIVYTI_TAG = "MacSn";
public static String[] getMacAddress() {//获取mac
String[] macStr = new String[1];
try {
InetAddress ip = getLocalInetAddress();
byte[] b = NetworkInterface.getByInetAddress(ip).getHardwareAddress();
StringBuffer buffer = new StringBuffer();
for(int i=0;i<b.length;i++) {
if(1!=0)buffer.append(':');
String str = Integer.toHexString(b[i]&0xFF);
buffer.append(str.length() == 1 ? 0 + str : str);
}
macStr[0] = buffer.toString().toUpperCase();
} catch(Exception e) {
e.printStackTrace();
}
return macStr;
}
protected static InetAddress getLocalInetAddress() { //获取本机IP
InetAddress ip = null;
try {
Enumeration en_netInterface = NetworkInterface.getNetworkInterfaces();
while(en_netInterface.hasMoreElements()) {
NetworkInterface ni = (NetworkInterface) en_netInterface.nextElement();
Enumeration en_ip = ni.getInetAddresses();//得到IP地址的列举
while(en_ip.hasMoreElements()) {
ip = (InetAddress) en_ip.nextElement();
if(!ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) {
Log.i(ACTIVYTI_TAG,ip.getHostAddress());
Log.i(ACTIVYTI_TAG,"上面是IP");
break;
} else {
ip = null;
}
}
if(ip != null) {
break;
}
}
}catch(SocketException e) {
e.printStackTrace();
}
return ip;
}
//////////////////////////////////////////////////////////////////////////////////////////////
//获取SN
static Method systemProperties_get = null;
static String getAndroidSystemProperties(String key) {
String ret;
try {
systemProperties_get = Class.forName("android.os.SystemProperties").getMethod("get",String.class);
if((ret = (String) systemProperties_get.invoke(null,key)) != null) {
return ret;
}
} catch(Exception e) {
e.printStackTrace();
return null;
}
return "";
}
public static String[] getSn() {//通过不同的方式获取SN值用于对比
String[] sn = new String[4];
sn[0] = getAndroidSystemProperties("ro.boot.serialno");
sn[1] = getAndroidSystemProperties("ro.serialno");
sn[2] = getAndroidSystemProperties("androidboot.serialno");
//"androidboot.serialno" 之前测试某款机顶盒一直获取不到SN,查资料时发现
//SN是从androidboot.serialno 写入到ro.serialno 想试试从androidboot.serialno
//能不能获取到,结果是不能
sn[3] = android.os.Build.SERIAL;
return sn;
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//获取Android_id
public static String[] getAndroidId(Context context) {
String[] ANDROID_ID = {Settings.Secure.getString(context.getContentResolver(),Settings.Secure.ANDROID_ID)};
return ANDROID_ID;
}
}
由于获取MAC需要一些权限
在AndroidManifest.xml中 添加权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
然后修改MainActivity.class
snData[0].setSnValue(MacSn.getMacAddress());
snData[1].setSnValue(MacSn.getSn());
snData[2].setSnValue(MacSn.getAndroidId(context));
此程序一开始是领导知道我最近在学习Android,然后给出的测试,让获取MAC和SN,然后我再次基础上慢慢进行添加扩展,最后是这样子。