Android设备开启保护
简介-为什么要设备保护?
随着Android手机越来越得到大众的欢迎以及Android的开源性,手机开发厂商为了提高手机体验尝试着各种定制化的服务,包括对每一个Android的硬件设备的改动。同时,为了降低成产成本、打造面向大众的低端机,部分硬件不支持的情况也会时有发生,如闪光灯(对普通手机用户来说,闪光灯并不是一件必需品)。
那么,针对以上的硬件设备问题,“我们该如何做出相应的处理来保证我们程序代码的健壮性”成了我们要关注的焦点问题。
Android设备有哪些?
相机设备--摄像头
闪光灯设备
传感器设备
定位设备--GPS/Network
蓝牙设备
Wifi设备
振动器设备
怎么保护?
下面我们将针对各个Android硬件设备,提出简单基础的开启保护。
相机设备--摄像头
做过硬件设备开发的都知道,相机设备的开启不一定会成功,这里失败的因素有很多:
1.系统没有检测到摄像头设备
2.没有前置摄像头(类型不匹配)
所以我们必须在使用相机之前做一下设备检测工作。对于相机,我们可以做那些设备检测呢?
保护策略:
1.判断是否存在摄像头
我可以通过下面的函数判断前置和后置摄像头是否存在:
2.判断开启是否成功(camera是否为null)
执行camera.open()或者camera.open(int cameraId)函数,如果启动相机失败,camera会为null,所以我们需要对camera进行判断是否为null,然后进行后续的操作。
3.开启默认前置摄像头的方法
另外,根据默认打开后置摄像头的camera.open()方法,我们提供一种默认打开前置摄像头的方法:
闪光灯设备
市场上,部分低端手机为了节约成本是不配置闪光灯的,如联想部分机型和vivo部分机型,所以我们在使用闪光灯时,同样需要进行相关的设备检测工作:
保护策略:
1.判断是否存在闪光灯
存在两种方式:
方法一:hasSystemFeature();
方法二:getSupportedFlashModes();
传感器设备
目前为止,Android5.0 API中传感器的种类已经达到25种,其中部分还没有得到支持,他们在不同API上,不同机型上的差异,决定着我们必须要进行设备保护。
(1)传感器的个数在API上存在的差异如下:
(2)不同的手机厂商采用不同种类、不同数量的传感器,同样导致了传感器不支持的问题:
保护策略:
(1)判断是否存在此类传感器
具体代码:
(2)获取指定一个传感器的方法
函数代码:
定位设备--GPS/Network
对于目前的手机市场,部分机型不支持GPS的问题屡见不鲜,作为开发者,不能盲目的使用GPS API,可能出现crash的状况。以下是我们需要注意的几点:
保护策略:
(1)判断是否支持GPS定位、Network定位
可以在使用定位前,通过LocationManager.isProviderEnabled(String Type) 判断手机是否支持该定位方式,避免出现异常:
(2)必须判断返回的Location对象是否为null
用getLastKnownLocation()方法是取上一次得到的位置信息,不一定返回结果,所以必须对Location对象进行判空操作,以免空指针异常;应该用requestLocationUpdates请求最新的位置信息,然后在LocationListener中的onLocationChanged处理接收到的位置信息。
判空操作:
蓝牙设备
蓝牙通讯是手机应用软件、游戏软件常用的硬件设备模块,使用它的过程也需要反复确认设备状态的:
保护策略:
(1)手机是否存在蓝牙设备
(2)当前蓝牙设备是否已打开
代码如下:
WIFI设备
WIFI与蓝牙比较相似,检测的方向也是一致的,wifi设备开启不成功的原因有:
1.手机硬件不支持Wifi;
2.由于厂商对部分机型的修改,在飞行模式下,执行开启wifi功能的API失效;
保护策略:
(1)判断手机是否支持WIFI
代码:
(2)判断WIFI是否打开
代码:
振动器设备
振动是手机app不可或缺的提醒服务之一,为了保证程序健壮性,我们也需要进行判空操作:
(1)检测系统是否支持振动
代码:
// 如果觉得不错,记得顶我哦! 顶我!顶我!顶我!