我正在尝试检索Android设备的MAC地址。如果WiFi打开,通常可以通过WiFiManager API实现。
如果WiFi关闭且WiFi Direct打开,是否有办法获取MAC地址? 在我的手机上,WiFi和WiFi Direct不能同时开启。
谢谢
我正在尝试检索Android设备的MAC地址。如果WiFi打开,通常可以通过WiFiManager API实现。
如果WiFi关闭且WiFi Direct打开,是否有办法获取MAC地址? 在我的手机上,WiFi和WiFi Direct不能同时开启。
谢谢
在我的项目中,我一直在寻找这个解决方案。我的要求是要在使用WiFi Direct形成的点对点网络中唯一标识设备。每个设备应该在下一次接近时识别它的友好设备。我需要自己的WiFi(Direct)MAC地址和我的朋友的地址来创建这个友情区域的密钥。
我的研究:设计采用了独特的全局ID和本地ID。原因:全局ID只能用于连接基础设施模式网络。本地ID可用于"点对点"模式网络(设备与设备之间)。在这种点对点模式下,有可能单个设备同时属于多个点对点组。
然而,没有直接的方法来获取自己的WiFi P2p MAC地址。问题53437:Android。
在这个问题的讨论中,来自Google的项目成员建议这是可能的,只是还没有记录下来。
解决方案:使用意图过滤器
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 Direct地址:
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;
}
WiFi的MAC地址与WiFi Direct的MAC地址不同。通常前两个字母可能会不同。请注意这一点。
WiFi Direct的MAC地址将会不同。在这里@auselen解释得非常好 https://dev59.com/-WTWa4cB1Zd3GeqPG81v#14480530。
我刚刚想出了一个检索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));
}
});