Android 内の XBMC Linux 環境でアドオンをコーディングしようとしています。XBMC 内に Mac アドレスが表示されます。しかし、アドオンの MAC アドレスを取得したいのですが、方法がわかりません。
mac=uuid.getnode()
私はすでに上記のようなコードを試しましたが、Androidで実行すると、数字のみが表示され、毎回異なります。
誰か提案をお願いします
Android 内の XBMC Linux 環境でアドオンをコーディングしようとしています。XBMC 内に Mac アドレスが表示されます。しかし、アドオンの MAC アドレスを取得したいのですが、方法がわかりません。
mac=uuid.getnode()
私はすでに上記のようなコードを試しましたが、Androidで実行すると、数字のみが表示され、毎回異なります。
誰か提案をお願いします
ドキュメントを見ると:
ハードウェア アドレスを 48 ビットの正の整数として取得します。これを初めて実行すると、別のプログラムが起動する可能性があり、非常に遅くなる可能性があります。ハードウェア アドレスを取得する試みがすべて失敗した場合、RFC 4122 で推奨されているように、8 番目のビットが 1 に設定されたランダムな 48 ビットの数値が選択されます。
最初の部分では、なぜ「数字のみ」なのかを説明しています。数値になるはずです。特定の 16 進文字列形式でそれが必要な場合は、単に形式を設定します。たとえば、 を呼び出しhex()
ます。
最後の文は、「毎回違う」理由を説明しています。ソースを見ると、 Windows 以外のプラットフォームでは、getnode
を試し_unixdll_getnode
、次にを試し_ifconfig_getnode
てから、乱数にフォールバックします。前者には、 または で呼び出される関数が必要ですがuuid_generate_time
、libuuid
これlibc
は Android には存在しません。後者はifconfig
、一連の異なるフラグを指定してコマンドを実行し、特定の文字列を検索して、 および にフォールバックしarp
ますlanscan
。繰り返しますが、これはどれも Android では機能しません。
Android で MAC アドレスを取得するための推奨される方法はありません。このブログ投稿では理由が説明されており、この SO の質問(特に Seka Alekseyev の回答) で詳細が追加されています。一部のアプリは、取得した MAC アドレスを保持し、再度チェックしないようにします。これにより、一部の問題は回避されますが、ほとんどの問題は回避されません。
WiFi、3G、Bluetooth など、意味のある各サービスの MAC を取得するための Java API があります。どれが「その」MAC であるかを決定するのはユーザー次第であり、適切なアクセス許可 (例: android.permission.ACCESS_WIFI_STATE
)が必要です。値がないかガベージ値がある場合がありますが、次のようなコードで取得できます。
WifiManager wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
String mac = wm.getConnectionInfo().getMacAddress();
私の知る限り、これらの関数を直接公開する SL4A やその他の Android Python ディストリビューションには何もないため、独自のラッパーを作成する必要があります。
XBMC InfoLabelsを使用できます
if xbmc.getInfoLabel('Network.MacAddress') != None:
mac_address = xbmc.getInfoLabel('Network.MacAddress')
else:
mac_address = None