दिलचस्प पोस्ट
क्लाउड कंप्यूटिंग क्या है? आप गिट में एक बुरा मर्ज का पता कैसे लगा सकते हैं? कैसे जावास्क्रिप्ट में एक इनलाइन इवेंट हैंडलर के लिए तर्क के रूप में ईवेंट को पास करें? एसवीजी डॉक्स कस्टम डेटा-विशेषताओं का समर्थन करते हैं? केवल फ़ील्ड का उपयोग करने के लिए जैक्सन निर्दिष्ट करने के लिए – अधिमानतः विश्व स्तर पर PHP ऑब्जेक्ट को एसोसिएटिव सरणी में कनवर्ट करें इकाई फ़्रेमवर्क: "विदेशी कुंजी बाधा को हल करने के लिए कैसे चक्र या एकाधिक कास्टेड पथ का कारण हो सकता है"? कैसे 'अपरिभाषित' त्रुटियों की संपत्ति नहीं पढ़ा जा सकता है? पांडा डेटाफ्रेम को फेराना, मूल्यों की जांच करना और उनमें से कुछ बनाना एंड्रॉइड जिंजरब्रेड और पहले के लिए कैलेंडर दृश्य (एपीआई <11) Angular2 में सैकड़ों पृष्ठों के साथ वेबसाइट का एहसास कैसे करें कैसे JSON.parse को हल करने के लिए: इस कोड में स्ट्रिंग में खराब नियंत्रण वर्ण, पायथन urllib2, मूल HTTP प्रमाणीकरण, और tr.im Linux dynamic linker से "कोई संस्करण जानकारी उपलब्ध नहीं" त्रुटि क्या है? CPU तापमान की निगरानी

Android 6.0 में मैक पता प्राप्त करना

मैं एक ऐप विकसित कर रहा हूं जो डिवाइस के मैक एड्रेस को प्राप्त करता है, लेकिन एंड्रॉइड 6.0 से मेरा कोड काम नहीं करता है, मुझे गलत मान दे रहा है।

यहाँ मेरा कोड है …

public String ObtenMAC() { WifiManager manager = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiInfo info = manager.getConnectionInfo(); return(info.getMacAddress().toUpperCase()); } 

असली मैक पते के बजाय, यह एक अजीब कोड देता है: "02: 00: 00: 00: 00: 00"।

क्या कोई मुझे इसे हल करने में मदद कर सकता है?

अग्रिम में धन्यवाद।

Solutions Collecting From Web of "Android 6.0 में मैक पता प्राप्त करना"

कृपया एंड्रॉइड 6.0 के परिवर्तन देखें।

इस रिलीज से शुरू करते हुए, अधिक डेटा संरक्षण वाले उपयोगकर्ताओं को प्रदान करने के लिए, Android वाई-फाई और ब्लूटूथ एपीआई के उपयोग से ऐप्स के लिए डिवाइस के स्थानीय हार्डवेयर पहचानकर्ता तक प्रोग्रामेटिक पहुंच को हटा देता है। WifiInfo.getMacAddress () और BluetoothAdapter.getAddress () विधियां अब 02: 00: 00: 00: 00: 00 का निरंतर मान लौटाते हैं।

ब्लूटूथ और वाई-फाई स्कैन के माध्यम से पास के बाह्य उपकरणों के हार्डवेयर पहचानकर्ताओं तक पहुंचने के लिए, आपके ऐप में अब ACCESS_FINE_LOCATION या ACCESS_COARSE_LOCATION अनुमतियां होनी चाहिए।

Android 6.0 में मैक एड्रेस प्राप्त करने के लिए कोड के नीचे का प्रयोग करें

 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 ""; } 

मुझे उपर्युक्त उत्तर काम पर नहीं मिला, लेकिन एक और जवाब पर ठोकर खाई।

यहां आईपीवी 6 पता पाने पर एक पूर्ण और आसान तरीका है और उसके बाद से मैक पता प्राप्त करना।

Android Marshmallow में Wi-Fi मैक पता कैसे प्राप्त करें

 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"; } 

पहले से ही यह परीक्षण किया है और यह काम करता है रोब एंडरसन के लिए बहुत धन्यवाद!

आप आईपीवी 6 स्थानीय पते से मैक पता प्राप्त कर सकते हैं। उदाहरण के लिए, आईपीवी 6 पते "fe80 :: 1034: 56 एफएफ: फि 78: 9 एबीसी" मैक पते से मेल खाती है "12-34-56-78-9 ए-बीसी"। नीचे दिए गए कोड देखें वाईफाई आईपीवी 6 पते को केवल एंड्रॉइड पिरिशन की आवश्यकता होती है। INTERNET

विकिपीडिया पृष्ठ आईपीवी 6 पता देखें, विशेषकर "स्थानीय पते" के बारे में नोट fe80 :: / 64 और "संशोधित EUI-64" के बारे में खंड।

 /** * Gets an EUI-48 MAC address from an IPv6 link-local address. * Eg, the IPv6 address "fe80::1034:56ff:fe78:9abc" * corresponds to the MAC address "12-34-56-78-9a-bc". * <p/> * See the note about "local addresses" fe80::/64 and the section about "Modified EUI-64" in * the Wikipedia article "IPv6 address" at https://en.wikipedia.org/wiki/IPv6_address * * @param ipv6 An Inet6Address object. * @return The EUI-48 MAC address as a byte array, null on error. */ private static byte[] getMacAddressFromIpv6(final Inet6Address ipv6) { byte[] eui48mac = null; if (ipv6 != null) { /* * Make sure that this is an fe80::/64 link-local address. */ final byte[] ipv6Bytes = ipv6.getAddress(); if ((ipv6Bytes != null) && (ipv6Bytes.length == 16) && (ipv6Bytes[0] == (byte) 0xfe) && (ipv6Bytes[1] == (byte) 0x80) && (ipv6Bytes[11] == (byte) 0xff) && (ipv6Bytes[12] == (byte) 0xfe)) { /* * Allocate a byte array for storing the EUI-48 MAC address, then fill it * from the appropriate bytes of the IPv6 address. Invert the 7th bit * of the first byte and discard the "ff:fe" portion of the modified * EUI-64 MAC address. */ eui48mac = new byte[6]; eui48mac[0] = (byte) (ipv6Bytes[8] ^ 0x2); eui48mac[1] = ipv6Bytes[9]; eui48mac[2] = ipv6Bytes[10]; eui48mac[3] = ipv6Bytes[13]; eui48mac[4] = ipv6Bytes[14]; eui48mac[5] = ipv6Bytes[15]; } } return eui48mac; } 

यह पूरी तरह से Marshmallow पर इसे प्राप्त करने के 2 तरीके कोड है, बस इसे पिछले कॉपी और यह काम करेगा!

 //Android 6.0 : Access to mac address from WifiManager forbidden private static final String marshmallowMacAddress = "02:00:00:00:00:00"; private static final String fileAddressMac = "/sys/class/net/wlan0/address"; public static String recupAdresseMAC(WifiManager wifiMan) { WifiInfo wifiInf = wifiMan.getConnectionInfo(); if(wifiInf.getMacAddress().equals(marshmallowMacAddress)){ String ret = null; try { ret= getAdressMacByInterface(); if (ret != null){ return ret; } else { ret = getAddressMacByFile(wifiMan); return ret; } } catch (IOException e) { Log.e("MobileAccess", "Erreur lecture propriete Adresse MAC"); } catch (Exception e) { Log.e("MobileAcces", "Erreur lecture propriete Adresse MAC "); } } else{ return wifiInf.getMacAddress(); } return marshmallowMacAddress; } private static String getAdressMacByInterface(){ try { List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces()); for (NetworkInterface nif : all) { if (nif.getName().equalsIgnoreCase("wlan0")) { 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 e) { Log.e("MobileAcces", "Erreur lecture propriete Adresse MAC "); } return null; } private static String getAddressMacByFile(WifiManager wifiMan) throws Exception { String ret; int wifiState = wifiMan.getWifiState(); wifiMan.setWifiEnabled(true); File fl = new File(fileAddressMac); FileInputStream fin = new FileInputStream(fl); StringBuilder builder = new StringBuilder(); int ch; while((ch = fin.read()) != -1){ builder.append((char)ch); } ret = builder.toString(); fin.close(); boolean enabled = WifiManager.WIFI_STATE_ENABLED == wifiState; wifiMan.setWifiEnabled(enabled); return ret; } 

प्रकट करें:

 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
  • सारांश: यह कोड इंटरफ़ेस से पहले मैक एड्रेस प्राप्त करने का प्रयास करेगा और अगर इसे फ़ाइल सिस्टम द्वारा प्राप्त करने में विफल रहेगा।

  • नोट: फ़ाइल सिस्टम के लिए, आपको फ़ाइल तक पहुंचने के लिए वाईफ़ाई को सक्षम करना होगा।

सैम के उत्तर के लिए thnx यहां https://stackoverflow.com/a/39288868/3818437

मै मैक एड्रेस को 2 तरीके से प्राप्त करने की कोशिश करता हूं, पहले इंटरफ़ेस के द्वारा और यदि इसकी असफल हो, तो मुझे इसे फाइल सिस्टम से मिलता है, लेकिन आपको फाइल को एक्सेस करने के लिए वाईफ़ाई को सक्षम करने की आवश्यकता है।

 //Android 6.0 : Access to mac address from WifiManager forbidden private static final String marshmallowMacAddress = "02:00:00:00:00:00"; private static final String fileAddressMac = "/sys/class/net/wlan0/address"; public static String recupAdresseMAC(WifiManager wifiMan) { WifiInfo wifiInf = wifiMan.getConnectionInfo(); if(wifiInf.getMacAddress().equals(marshmallowMacAddress)){ String ret = null; try { ret= getAdressMacByInterface(); if (ret != null){ return ret; } else { ret = getAddressMacByFile(wifiMan); return ret; } } catch (IOException e) { Log.e("MobileAccess", "Erreur lecture propriete Adresse MAC"); } catch (Exception e) { Log.e("MobileAcces", "Erreur lecture propriete Adresse MAC "); } } else{ return wifiInf.getMacAddress(); } return marshmallowMacAddress; } private static String getAdressMacByInterface(){ try { List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces()); for (NetworkInterface nif : all) { if (nif.getName().equalsIgnoreCase("wlan0")) { 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 e) { Log.e("MobileAcces", "Erreur lecture propriete Adresse MAC "); } return null; } private static String getAddressMacByFile(WifiManager wifiMan) throws Exception { String ret; int wifiState = wifiMan.getWifiState(); wifiMan.setWifiEnabled(true); File fl = new File(fileAddressMac); FileInputStream fin = new FileInputStream(fl); ret = convertStreamToString(fin); fin.close(); boolean enabled = WifiManager.WIFI_STATE_ENABLED == wifiState; wifiMan.setWifiEnabled(enabled); return ret; } 

इस रेखा को अपने मेनिफेस्ट में जोड़ें

 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 

मैं आपको अपनी पसंद की तरह अपने मैक एड्रेस को यहाँ जारी रखने की सलाह देता हूं

 mac = activity.getSharedPreferences("MAC_ADDRESS", Context.MODE_PRIVATE).getString("MAC_ADDRESS", ""); if(mac == null || mac.equals("")){ WifiManager wifiMan = (WifiManager) activity.getSystemService(Context.WIFI_SERVICE); mac = MobileAccess.recupAdresseMAC(wifiMan); if(mac != null && !mac.equals("")){ SharedPreferences.Editor editor = activity.getSharedPreferences("MAC_ADDRESS", Context.MODE_PRIVATE).edit(); editor.putString("MAC_ADDRESS", mac).commit(); } } 

पहले आपको इंटरनेट उपयोगकर्ता अनुमति जोड़ने की आवश्यकता है।

 <uses-permission android:name="android.permission.INTERNET" /> 

उसके बाद आप नेटवर्क इंटरफेस एपीआई पर मैक पा सकते हैं।

 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"; } 

जवाब ज्यादातर सही हैं, लेकिन ध्यान रखें, कि एंड्रॉइड 7 में कोई बदलाव है। आपको इसका उपयोग करना होगा

DevicePolicyManager और विधि getWifiMacAddress आधिकारिक दस्तावेज़ों में एक टाइपो है, जिसका मतलब है कि आपको इसे कॉपी / पेस्ट करना चाहिए।

 DevicePolicyManager.getWifiMacAddress() 

Refs: https://developer.android.com/about/versions/nougat/android-7.0-changes.html

एंड्रॉइड नोऊगैट और हे प्रोगैम में डिवाइस मैक एड्रेस प्राप्त करें

यह बिल्कुल ठीक है

 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 ""; } }