我正在嘗試檢索Android設備的MAC地址。如果WiFi處於打開狀態,這通常可以通過WiFiManager API訪問。如何檢索WiFi Direct MAC地址?
如果WiFi關閉並且WiFi Direct處於打開狀態,有什麼方法可以獲取MAC地址? WiFi和WiFi Direct無法在我的手機上同時開啓。
謝謝
我正在嘗試檢索Android設備的MAC地址。如果WiFi處於打開狀態,這通常可以通過WiFiManager API訪問。如何檢索WiFi Direct MAC地址?
如果WiFi關閉並且WiFi Direct處於打開狀態,有什麼方法可以獲取MAC地址? WiFi和WiFi Direct無法在我的手機上同時開啓。
謝謝
WiFi的MAC地址不同於WiFi Direct的MAC地址。通常前兩個字母可能不同。小心一點。
WiFi Direct mac地址將會有所不同。這是由@auselen在這裏精美地解釋https://stackoverflow.com/a/14480530/3167704。
我剛想出一個方法來檢索WiFi Direct的mac地址。這並不漂亮,但完成了工作。這裏的代碼,
final WifiP2pManager p2pManager = (WifiP2pManager) getSystemService(WIFI_P2P_SERVICE);
final WifiP2pManager.Channel channel = p2pManager.initialize(this, getMainLooper(), null);
p2pManager.createGroup(channel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
p2pManager.requestGroupInfo(channel, new WifiP2pManager.GroupInfoListener() {
@Override
public void onGroupInfoAvailable(WifiP2pGroup wifiP2pGroup) {
Log.i("", wifiP2pGroup.getOwner().deviceAddress);
// Following removal necessary to not have the manager busy for other stuff, subsequently
p2pManager.removeGroup(channel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Log.i("", "Removed");
}
@Override
public void onFailure(int i) {
Log.i("", "Failed " + i);
}
});
}
});
}
@Override
public void onFailure(int i) {
Log.i("", String.valueOf(i));
}
});
我一直在尋找這個在我的項目。我的要求是唯一標識由WiFi Direct組成的特別P2p網絡中的設備。每個設備在下一次接近時都應該標識其好友設備。我需要我自己的WiFi(Direct)MAC和我的朋友們爲這個朋友區創建創建一個密鑰。
我的研究:設計是這樣的,有一個唯一的通用ID和本地ID。 原因:通用ID只能用於連接到基礎架構模式網絡。本地ID可用於「ad-hoc」模式網絡(設備到設備)。在這種特設模式下,單個設備可能同時屬於幾個特設組。
但是,沒有直接的方法來獲得自己的WiFi P2p MAC地址。 Issue 53437: Android。
在這一問題的討論,從谷歌的項目成員曾建議這是可能的,只是它沒有被記錄在案
解決方案:使用意圖過濾
WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION
和意圖WifiP2pManager.EXTRA_WIFI_P2P_DEVICE
額外
這是我如何在我的項目中使用它:
@Override
public void onReceive(Context context, Intent intent) {
....
....
String action = intent.getAction();
if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION
.equals(action)) {
WifiP2pDevice device = (WifiP2pDevice) intent
.getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_DEVICE);
String myMac = device.deviceAddress;
Log.d(TAG, "Device WiFi P2p MAC Address: " + myMac);
/* Saving WiFi P2p MAC in SharedPref */
sharedPref = context.getSharedPreferences(context.getString(R.string.sp_file_name), Context.MODE_PRIVATE);
String MY_MAC_ADDRESS = sharedPref.getString(context.getString(R.string.sp_field_my_mac), null);
if (MY_MAC_ADDRESS == null || MY_MAC_ADDRESS != myMac) {
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString(context.getString(R.string.sp_field_my_mac), myMac);
editor.commit();
}
希望這可以幫助別人!
WiFi的MAC地址與WiFi Direct的MAC地址不同。
可以使用下面的代碼獲得直接WiFi地址:
public String getWFDMacAddress(){
try {
List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface ntwInterface : interfaces) {
if (ntwInterface.getName().equalsIgnoreCase("p2p0")) {
byte[] byteMac = ntwInterface.getHardwareAddress();
if (byteMac==null){
return null;
}
StringBuilder strBuilder = new StringBuilder();
for (int i=0; i<byteMac.length; i++) {
strBuilder.append(String.format("%02X:", byteMac[i]));
}
if (strBuilder.length()>0){
strBuilder.deleteCharAt(strBuilder.length()-1);
}
return strBuilder.toString();
}
}
} catch (Exception e) {
Log.d(TAG, e.getMessage());
}
return null;
}
不錯的,謝謝! –
拿去......這實在太醜陋... *嘆*。必須有另一種方式... –