2017年8月 bug总结

1.android 6.0获取不到蓝牙地址或者获取到错误的蓝牙地址(02:00:00:00:00:00)
(所有蓝牙操作必须在真机进行,否则,轻则没有反应,重则crash)
很多同学通过
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
获取到蓝牙之后,直接调用getAddress获取本机蓝牙mac地址,结果缺获取到了02:00:00:00:00:00。
然后所有的android6.0以上的手机都是这样。据说6.0以下没有这个问题,我没试过全部机型,只试了一个Sumsang S3 android 4.1 ,是可以获取到地址的。

解决方案有两个:

第一中:(推荐,简单)
只需要调用下面的 一行代码就能获取到,而且不需要任何的权限
String mac = android.provider.Settings.Secure.getString(this.getContentResolver(), “bluetooth_address”);
这样就能获取到本机的mac
说一下这种方案的缺点,因为每个版本的SDK都可能修改了,所以这种方法在android4.1上返回null的,大家注意,我在网上查的,有同学说4.3的手机是好用的,我不确定,最好每个版本都试一次。所以我给的解决方案是,判断SDK版本
android.os.Build.VERSION.SDK_INT
大于等于6.0那么就用我说的这种和方法,小于就用getAddress。

再一次郑重承诺,我没有测试过android所有 的版本,不确定是什么结果,所以,一切以实验结果为准!!

第二种:(不推荐,复杂)

为什么还要介绍第二种,因为这是一种思路,虽然不是最优的,可能还有漏洞,但是还想和大家分享一下:

因为我们能获取到本台设备的名字,也能获取到这台设备连接过的设备mac(这里获取到的mac是真实的mac地址),所以我们就可以通过名字来获取到相应的设备mac。
有了这个思路,我们可以这样操作,比如现在有A,B两台设备,你想获取A的蓝牙地址,那么你首先需要A,B有连接,然后再B设备上获取连接的设备,然后通过A设备的名字就能拿到他的蓝牙地址了。(类比Map的key-value)

我上面说的一个漏洞是什么意思呢?因为蓝牙的名字是可以用户默认修改的,所以就有可能得到的设备name是一样的,这时候就不能唯一的确定该设备的蓝牙地址了。所以如果能形成一种约定,name是唯一的,那么这种方法也是可行的
下面贴一下获取

BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();     
Set devices = adapter.getBondedDevices();     
for(int i=0; i
{     
   BluetoothDevice device = (BluetoothDevice) devices.iterator().next();    
   //这时候就能获取到已连接的设备的信息 
   System.out.println("name=="+device.getName()+"---"+"address=="+device.getAddress());     
}    

2.可以不安装JDK,直接安装Android studio来跑Android项目

3.手机连不上电脑,什么打开开发者选项,下载相应的SDK之类的我就不说了,这种情况多半是因为电脑安装手机驱动是报了,这时候就需要使用一些第三方的软件,比如360手机助手,应用宝之类的,他们会自动安装手机驱动。

你可能感兴趣的:(那些年加过的班)