获取 Andorid 手机WIFI连接的Mac地址和IP地址
获取 Andorid 手机WIFI连接的Mac地址和IP地址
实验室里发现Wifi,代理又得经过认证MAC地址。通过查询Android的API文档,可以通过以下代码进行MAC地址等信息的查询。(Android 2.2)
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
android:id="@+id/info"/>
LinearLayout>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="proj.javaangle" android:versionCode="1" android:versionName="1.0">
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Mac" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
intent-filter>
activity>
application>
manifest>
Mac.java
package proj.javaangle;
import android.app.Activity;
import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.widget.TextView;
public class Mac extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView infoText = (TextView) this.findViewById(R.id.info);
infoText.setText(getInfo());
}
private String getInfo()
{
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifi.getConnectionInfo();
String maxText = info.getMacAddress();
String ipText = intToIp(info.getIpAddress());
String status = "";
if (wifi.getWifiState() == WifiManager.WIFI_STATE_ENABLED)
{
status = "WIFI_STATE_ENABLED";
}
String ssid = info.getSSID();
int networkID = info.getNetworkId();
int speed = info.getLinkSpeed();
return "mac:" + maxText + "\n\r"
+ "ip:" + ipText + "\n\r"
+ "wifi status :" + status + "\n\r"
+ "ssid :" + ssid + "\n\r"
+ "net work id :" + networkID + "\n\r"
+ "connection speed:" + speed + "\n\r"
;
}
private String intToIp(int ip)
{
return (ip & 0xFF) + "." + ((ip >> 8) & 0xFF) + "." + ((ip >> 16) & 0xFF) + "."
+ ((ip >> 24) & 0xFF);
}
}
程序运行结果如下 :
总结:
1.通过Android SDK API查询,
public int getIpAddress ()
public String getMacAddress ()
以上两个方法在SDK API文档中只有方法名签名,没有找到任何相关描述信息。通过到方法名称的分析,得出这两个方法为获得手机MAC地址和IP地址的方法。 2.getIpAddress()方法返回值 在API文档中,此方法的返回值为int,通过测试,输入结果为“1090627776”,通过分析计算,得出此int值为十进制,将此十进制数转化为二进制,得到“01000001 00000001 10101000 11000000”,每八位进行分割,分别将其转化为二进制得到四组十进制:“65 1 168 192”,可以看出这组数字为IP地址,但是顺序是逆向的。所以通过到原来二进制的解析( intToIp( int ip)),最终得到经常使用的IP地址。更多相关文章
- Android(安卓)平台上SDCard的自动mount的解决方法
- 内容为引用别人的文章,备自己学习之用.
- Android(安卓)Touch 事件总结
- android 8.0 ,9.0 静态广播不显示问题处理
- Android实现的视频背景
- EventBus源码解析
- 菜单栏上没有android机器人的图标(AVD)的解决方法
- Android(安卓)root的两种方法 -- udev漏洞和setuid漏洞
- android 铃声设置流程