私はプロジェクト中にこれを探していました。私の要件は、WiFi Direct で形成されたアドホック P2p ネットワークでデバイスを一意に識別することでした。各デバイスは、次に近接したときにそのフレンド デバイスを識別する必要があります。このフレンド ゾーンを作成するためのキーを作成するには、自分の WiFi (ダイレクト) MAC とフレンドが必要でした。
私の調査:設計は、Unique Universal ID と Local ID があるような方法です。理由:ユニバーサル ID は、インフラストラクチャ モード ネットワークへの接続にのみ使用できます。ローカル ID は、「アドホック」モード ネットワーク (デバイスからデバイス) に使用できます。このアドホック モードでは、1 つのデバイスが同時に複数のアドホック グループに属する可能性があります。
- したがって、この同時操作をサポートするために、P2p デバイスは複数の MAC エンティティを、場合によっては異なるチャネルでサポートします。
- セッションごとに、永続的なグループは、セッションごとに異なるチャネルとデバイス MAC を使用する場合があります。
- P2P デバイスは、検出とネゴシエーション中にグローバル MAC アドレスをデバイス ID として使用し、グループ内のすべてのフレームの一時的なローカル MAC アドレスを使用します。ここからわかる
ただし、独自の 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();
}
これが誰かを助けることを願っています!