Android设备开启保护

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)检测系统是否支持振动

               代码:

                      

// 如果觉得不错,记得顶我哦! 顶我!顶我!顶我!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值