我想使用Wifi访问手机的MAC地址。但不知怎的,我无法做对。 我写了以下代码。
context=this;
setContentView(R.layout.activity_main);
try{
WifiManager wifi=(WifiManager)this.context.getSystemService(context.WIFI_SERVICE);
wifi.setWifiEnabled(true);
WifiInfo info=wifi.getConnectionInfo();
String address=info.getMacAddress();
if(address==null){
Toast.makeText(context, "Null", Toast.LENGTH_LONG).show();
}
else{
new AsyncClass(MainActivity.this,address).execute();
}
}catch(Exception e){
Toast.makeText(context, e.toString(), Toast.LENGTH_LONG).show();
}
当我在手机上运行时,它会给我一个错误"不幸的是应用已停止" 当我在Imulator上运行这个程序时,它总是给出地址是空的。 请帮我摆脱它。 提前谢谢。
我的清单文件如下:
<uses-permission
android:required="true"
android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission
android:required="true"
android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission
android:required="true"
android:name="android.permission.INTERNET"/>
答案 0 :(得分:1)
请在清单中添加权限,如下所示
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
编写一个函数/方法检索Mac地址,如下所示
public String retrieveMacAddress(Context context) {
WifiManager wimanager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
String macAddress = wimanager.getConnectionInfo().getMacAddress();
if (macAddress == null) {
macAddress = "Device don't have mac address or wi-fi is disabled";
}
return macAddress;
}
答案 1 :(得分:0)
您的代码工作正常,只需删除asyncTask Line并输入Toast消息即可。然后您的代码将在device.its上正常运行。我检查了你的代码。我认为你必须在异步任务中得到错误。
try {
WifiManager wifi = (WifiManager) this
.getSystemService(this.WIFI_SERVICE);
wifi.setWifiEnabled(true);
WifiInfo info = wifi.getConnectionInfo();
String address = info.getMacAddress();
if (address == null) {
Toast.makeText(this, "Null", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this, address, Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show();
}
答案 2 :(得分:0)
public void uploadMacAddressTOserver(String address) {
new Thread(new Runnable() {
@Override
public void run() {
try {
CallWebserviceToUploadMacAddress(address);
} catch (IOException e) {
}
}
}).start();
}
您可以使用线程并将数据上传到服务器。可能在AsyncTask
中你必须传递一些错误的参数,所以它会给出错误。