获取 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,技术···)