• android 取mac若干问题


    问题一:Error:Error: The WIFI_SERVICE must be looked up on the Application context or memory will leak on de

     

    android studio 移植的bug解决记录

    解决:

    eclipse到android studio的一些记录: 
    1、Error: Your project contains C++ files but it is not using a supported native build system.

    解决方案: 
    如果没有grade.properties, 创建grade.properties 
    grade.properties添加android.useDeprecatedNdk=true 
    build.gradle添加sourceSets

    buildTypes 
    {
            ...           
            sourceSets 
    {
                main 
    {
                    jni.srcDirs = []
                }
            }
        }

    2、Error:(224) Error: The WIFI_SERVICE must be looked up on the Application context or memory will leak on devices < Android N. Try changing to .getApplicationContext() [WifiManagerLeak] 
    解决方案: 
    Android7 在获取 WifiManager的时候需要使用.getApplicationContext(),如果未使用会造成内存泄露。
    原:

    WifiManager wifiMgr = (WifiManager) getSystemService(WIFI_SERVICE);

    改:

    WifiManager wifiMgr = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);

    3、Error:(3) Error: “app_name” is not translated in “en” (English) [MissingTranslation] 
    解决方案: 
    build.gradle添加配置

    android {
        ...
        lintOptions{
            checkReleaseBuilds false
            abortOnError false
        }
    }

    4、Signature Version: V1(jar Signature) V2(full apk signature) 
    Android 7.0中引入了APK Signature Scheme v2,v1呢是jar Signature来自JDK 
    V1:应该是通过ZIP条目进行验证,这样APK 签署后可进行许多修改 - 可以移动甚至重新压缩文件。 
    V2:验证压缩文件的所有字节,而不是单个 ZIP 条目,因此,在签名后无法再更改(包括 zipalign)。正因如此,现在在编译过程中,我们将压缩、调整和签署合并成一步完成。好处显而易见,更安全而且新的签名可缩短在设备上进行验证的时间(不需要费时地解压缩然后验证),从而加快应用安装速度。

     

    问题二:Android6.0系统获getMacAddress()取Wifi和蓝牙Mac地址返回02:00:00:00:00:00解决办法

    解决办法:

    之前使用的方法如下:

    // Android 6.0之前的版本可以用的方法(模拟器可以使用)  
        private String getMacAddrOld()  
        {  
            String macString = "";  
            WifiManager wifimsg = (WifiManager)getSystemService(Context.WIFI_SERVICE);  
            if (wifimsg != null)  
            {  
                if (wifimsg.getConnectionInfo() != null)  
                {  
                    if (wifimsg.getConnectionInfo().getMacAddress() != null)  
                    {  
                        macString = wifimsg.getConnectionInfo().getMacAddress();  
                    }  
                }  
            }  
            return macString;  
        }  

    使用这个方法,在模拟器上是可以正常获取wifi mac地址,但是在Android 6.0系统上,获取的就有问题,返回的是“02:00:00:00:00:00”

    谷歌搜到了如下的方法,可以获取Android6.0系统的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(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";  
        }  
    

      最后,是先使用旧的方法获取,如果获取到的是“02:00:00:00:00:00”,那么就调用下面的新方法。

    public String getDeviceMacAddress()  
        {  
            String addr = getMacAddrOld();  
            if(addr.equals("02:00:00:00:00:00"))  
            {  
                addr = getMacAddr();  
            }  
            return addr;  
        }  

    【欢迎转载】

     转载请表明出处: 乐学习

  • 相关阅读:
    charCodeAt() 和charAt()
    去除全角空格
    string字符串js操作
    取小数的常见操作
    js取最大最小值
    js加减法运算多出很多小数点
    js设置div透明度
    setTimeout设置不起作用
    node.js 找不到 xxx 模块解决办法
    servlet 监听器和过滤器入门
  • 原文地址:https://www.cnblogs.com/JLZT1223/p/7084267.html
Copyright © 2020-2023  润新知