2

Android 内の XBMC Linux 環境でアドオンをコーディングしようとしています。XBMC 内に Mac アドレスが表示されます。しかし、アドオンの MAC アドレスを取得したいのですが、方法がわかりません。

mac=uuid.getnode()

私はすでに上記のようなコードを試しましたが、Androidで実行すると、数字のみが表示され、毎回異なります。

誰か提案をお願いします

4

3 に答える 3

3

ドキュメントを見ると:

ハードウェア アドレスを 48 ビットの正の整数として取得します。これを初めて実行すると、別のプログラムが起動する可能性があり、非常に遅くなる可能性があります。ハードウェア アドレスを取得する試みがすべて失敗した場合、RFC 4122 で推奨されているように、8 番目のビットが 1 に設定されたランダムな 48 ビットの数値が選択されます。

最初の部分では、なぜ「数字のみ」なのかを説明しています。数値になるはずです。特定の 16 進文字列形式でそれが必要な場合は、単に形式を設定します。たとえば、 を呼び出しhex()ます。

最後の文は、「毎回違う」理由を説明しています。ソースを見ると、 Windows 以外のプラットフォームでは、getnodeを試し_unixdll_getnode、次にを試し_ifconfig_getnodeてから、乱数にフォールバックします。前者には、 または で呼び出される関数が必要ですがuuid_generate_timelibuuidこれ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 ディストリビューションには何もないため、独自のラッパーを作成する必要があります。

于 2013-02-01T00:10:55.700 に答える
3

XBMC InfoLabelsを使用できます

if xbmc.getInfoLabel('Network.MacAddress') != None:
    mac_address = xbmc.getInfoLabel('Network.MacAddress')
else:
    mac_address = None
于 2014-03-03T17:33:59.380 に答える