프로그래밍 방식으로 Android 기기의 MAC 가져 오기
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 변경 사항을 참조하십시오 .
사용자에게 더 나은 데이터 보호를 제공하기 위해 이번 릴리스부터 Android는 Wi-Fi 및 Bluetooth API를 사용하는 앱의 기기 로컬 하드웨어 식별자에 대한 프로그래밍 방식 액세스를 제거합니다. WifiInfo.getMacAddress () 및 BluetoothAdapter.getAddress () 메서드는 이제 상수 값 02 : 00 : 00 : 00 : 00 : 00을 반환합니다.
블루투스 및 Wi-Fi 검색을 통해 주변 외부 기기의 하드웨어 식별자에 액세스하려면 이제 앱에 ACCESS_FINE_LOCATION 또는 ACCESS_COARSE_LOCATION 권한이 있어야합니다.
MAC 주소를 가져 오는 것은 WifiInfo.getMacAddress()
Marshmallow 이상에서 작동하지 않으며 비활성화되었으며 상수 값을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 "";
}
}
Mac 주소를 얻을 수 있습니다.
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wInfo = wifiManager.getConnectionInfo();
String mac = wInfo.getMacAddress();
Menifest.xml에서 권한 설정
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
You can no longer get the hardware MAC address of a android device. WifiInfo.getMacAddress() and BluetoothAdapter.getAddress() methods will return 02:00:00:00:00:00. This restriction was introduced in Android 6.0.
But Rob Anderson found a solution which is working for < Marshmallow : https://stackoverflow.com/a/35830358
Taken from the Android sources here. This is the actual code that shows your MAC ADDRESS in the system's settings app.
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);
}
Using this simple method
WifiManager wm = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
String WLANMAC = wm.getConnectionInfo().getMacAddress();
I think I just found a way to read MAC addresses without LOCATION permission: Run ip link
and parse its output. (you could probably do the similar by looking at this binary's source code)
참고URL : https://stackoverflow.com/questions/11705906/programmatically-getting-the-mac-of-an-android-device
'programing tip' 카테고리의 다른 글
masksToBounds = YES가 CALayer 그림자를 방지하는 이유는 무엇입니까? (0) | 2020.10.07 |
---|---|
빌드 오류 : "다른 프로세스에서 사용 중이므로 프로세스가 파일에 액세스 할 수 없습니다." (0) | 2020.10.07 |
Ruby에서 fail 키워드는 무엇을합니까? (0) | 2020.10.07 |
jQuery UI Resizable을 사용하여 가로 또는 세로로만 크기를 조정하는 방법은 무엇입니까? (0) | 2020.10.07 |
템플릿 클래스의 단일 메서드에 대한 템플릿 전문화 (0) | 2020.10.06 |