Javaを使用してAndroidデバイスのMACアドレスを取得する必要があります。オンラインで検索しましたが、有用なものは見つかりませんでした。
コメントですでに指摘したように、MACアドレスは WifiManager を介して受信できます。
WifiManager manager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo info = manager.getConnectionInfo();
String address = info.getMacAddress();
また、AndroidManifest.xml
に適切な権限を追加することを忘れないでください
<uses-permission Android:name="Android.permission.ACCESS_WIFI_STATE"/>
Android 6.0 Changes を参照してください。
このリリース以降、ユーザーにデータ保護を強化するため、Androidは、Wi-FiおよびBluetooth APIを使用するアプリのデバイスのローカルハードウェア識別子へのプログラムによるアクセスを削除します。 WifiInfo.getMacAddress()およびBluetoothAdapter.getAddress()メソッドは、02:00:00:00:00:00の定数値を返すようになりました。
BluetoothおよびWi-Fiスキャンを介して近くの外部デバイスのハードウェア識別子にアクセスするには、アプリにACCESS_FINE_LOCATIONまたはACCESS_COARSE_LOCATION権限が必要です。
MACアドレスを WifiInfo.getMacAddress()
で取得しても、マシュマロ以上では動作しません。無効になっており、 02:00:00:00:00:00
の定数値 を返します。
public static String getMacAddr() {
try {
List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface nif : all) {
if (!nif.getName().equalsIgnoreCase("wlan0")) continue;
byte[] macBytes = nif.getHardwareAddress();
if (macBytes == null) {
return "";
}
StringBuilder res1 = new StringBuilder();
for (byte b : macBytes) {
res1.append(String.format("%02X:",b));
}
if (res1.length() > 0) {
res1.deleteCharAt(res1.length() - 1);
}
return res1.toString();
}
} catch (Exception ex) {
}
return "02:00:00:00:00:00";
}
<uses-permission Android:name="Android.permission.ACCESS_WIFI_STATE" />
public String getMacAddress(Context context) {
WifiManager wimanager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
String macAddress = wimanager.getConnectionInfo().getMacAddress();
if (macAddress == null) {
macAddress = "Device don't have mac address or wi-fi is disabled";
}
return macAddress;
}
他の方法がある こちら
http://robinhenniges.com/en/Android6-get-mac-address-programmatically からこのソリューションを設立しましたが、それは私のために働いています!希望が役立ちます!
public static String getMacAddr() {
try {
List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface nif : all) {
if (!nif.getName().equalsIgnoreCase("wlan0")) continue;
byte[] macBytes = nif.getHardwareAddress();
if (macBytes == null) {
return "";
}
StringBuilder res1 = new StringBuilder();
for (byte b : macBytes) {
String hex = Integer.toHexString(b & 0xFF);
if (hex.length() == 1)
hex = "0".concat(hex);
res1.append(hex.concat(":"));
}
if (res1.length() > 0) {
res1.deleteCharAt(res1.length() - 1);
}
return res1.toString();
}
} catch (Exception ex) {
}
return "";
}
マシュマロでの作業
package com.keshav.fetchmacaddress;
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
import Android.util.Log;
import Java.net.InetAddress;
import Java.net.NetworkInterface;
import Java.net.SocketException;
import Java.net.UnknownHostException;
import Java.util.Collections;
import Java.util.List;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e("keshav","getMacAddr -> " +getMacAddr());
}
public static String getMacAddr() {
try {
List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface nif : all) {
if (!nif.getName().equalsIgnoreCase("wlan0")) continue;
byte[] macBytes = nif.getHardwareAddress();
if (macBytes == null) {
return "";
}
StringBuilder res1 = new StringBuilder();
for (byte b : macBytes) {
res1.append(Integer.toHexString(b & 0xFF) + ":");
}
if (res1.length() > 0) {
res1.deleteCharAt(res1.length() - 1);
}
return res1.toString();
}
} catch (Exception ex) {
//handle exception
}
return "";
}
}
私はこのコードを自分でテストしました。利用可能なWiFiまたはイーサネットのMACアドレスを提供します。
public static String getMacAddr() {
try {
List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface nif : all) {
if (!nif.getName().equalsIgnoreCase("wlan0")) continue;
byte[] macBytes = nif.getHardwareAddress();
if (macBytes == null) {
return "";
}
StringBuilder res1 = new StringBuilder();
for (byte b : macBytes) {
res1.append(Integer.toHexString(b & 0xFF) + ":");
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < macBytes.length; i++) {
sb.append(String.format("%02X%s", macBytes[i], (i < macBytes.length - 1) ? "-" : ""));
}
if (res1.length() > 0) {
res1.deleteCharAt(res1.length() - 1);
}
return res1.toString();
}
} catch (Exception ex) {
//handle exception
}
return getMacAddress();
}
public static String loadFileAsString(String filePath) throws Java.io.IOException{
StringBuffer data = new StringBuffer(1000);
BufferedReader reader = new BufferedReader(new FileReader(filePath));
char[] buf = new char[1024];
int numRead=0;
while((numRead=reader.read(buf)) != -1){
String readData = String.valueOf(buf, 0, numRead);
data.append(readData);
}
reader.close();
return data.toString();
}
public static String getMacAddress(){
try {
return loadFileAsString("/sys/class/net/eth0/address")
.toUpperCase().substring(0, 17);
} catch (IOException e) {
e.printStackTrace();
return "02:00:00:00:00:00";
}
}
MACアドレスを取得できます:
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wInfo = wifiManager.getConnectionInfo();
String mac = wInfo.getMacAddress();
Manifest.ymlで許可を設定する
<uses-permission Android:name="Android.permission.ACCESS_WIFI_STATE"></uses-permission>
AndroidデバイスのハードウェアMACアドレスを取得できなくなりました。 WifiInfo.getMacAddress()およびBluetoothAdapter.getAddress()メソッドは02:00:00:00:00:00を返します。この制限はAndroid 6.0で導入されました。
しかし、Rob Andersonは<Marshmallowで機能するソリューションを見つけました。 https://stackoverflow.com/a/35830358
Androidソースから取得 ここ 。これは、システムの設定アプリでMACアドレスを表示する実際のコードです。
private void refreshWifiInfo() {
WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
Preference wifiMacAddressPref = findPreference(KEY_MAC_ADDRESS);
String macAddress = wifiInfo == null ? null : wifiInfo.getMacAddress();
wifiMacAddressPref.setSummary(!TextUtils.isEmpty(macAddress) ? macAddress
: getActivity().getString(R.string.status_unavailable));
Preference wifiIpAddressPref = findPreference(KEY_CURRENT_IP_ADDRESS);
String ipAddress = Utils.getWifiIpAddresses(getActivity());
wifiIpAddressPref.setSummary(ipAddress == null ?
getActivity().getString(R.string.status_unavailable) : ipAddress);
}
LOCATION許可なしでMACアドレスを読み取る方法を見つけたと思います:ip addr
を実行し、その出力を解析します。 (おそらく、このバイナリのソースコードを見ると同様のことができます)
この簡単な方法を使用して
WifiManager wm = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
String WLANMAC = wm.getConnectionInfo().getMacAddress();