美文网首页6.0Android进阶之路Android知识
Android判断用户开启了摄像头权限

Android判断用户开启了摄像头权限

作者: CaptainJno | 来源:发表于2017-04-13 15:08 被阅读1546次

    如题,既然是判断用户是否允许了摄像头权限,那么,咱们就忽略是Manifest权限配置的问题,因为这是开发者的事。

    用户首次使用APP调用摄像头功能,手机会提示是否允许该应用使用摄像头。有些用户小手一抖、或者任性禁止权限,咔擦,就给你关了,那好了。下回再用摄像头,就会出现APP界面一片黑,或者崩溃的情况。

    作为开发者,正常思路是要提示用户:“摄像头权限被你关了,赶紧去手动开启,不然,就别想用该功能了!"。那,咱们该怎么实现这个思路呢?

    第一步、判断摄像头权限

    Android API没提供判断摄像头权限是否被关闭的方法,但是,我们依然有办法,直接上代码:

    public static boolean isCameraUseable() {

    boolean canUse =true;

    Camera mCamera =null;

    try{

    mCamera = Camera.open();

    // setParameters 是针对魅族MX5。MX5通过Camera.open()拿到的Camera对象不为null

    Camera.Parameters mParameters = mCamera.getParameters();

    mCamera.setParameters(mParameters);

    }catch(Exception e) {

    canUse =false;

    }

     if(mCamera !=null) {

     mCamera.release();

     }

     return canUse;

     }

    上面方法,放心copy到你的代码里,在使用摄像头逻辑之前,调用一下,返回ture说明摄像头权限是开启的。反之,摄像头权限被用户关掉了。

    附注:

    1、上面代码思路是通过调用Camera.open(),然后根据是否出现异常来判断权限状态。Google就是这么干的!感兴趣的同学可以看看Android SDK源码中,android.hardware.Camera这个类,在第490行左右的代码。

      2、例外:由于魅族MX5的ROM改了很多东西,Google大哥的方法不能完全直接用,于是又加了上面有注释处的代码,这里不做过多解释。

    第二步、给提示

    如果摄像头权限被用户关掉了,处理思路是:弹出个对话框,提示用户去系统设置中,找到摄像头管理权限界面,手动打开摄像头权限。

    第三步、跳转设置界面手动开启权限

    跳转设置界面的代码如下:

    Intent intent =new Intent(Settings.ACTION_SETTINGS);

    context.startActivity(intent);

    到这儿,三个步骤结束了。


    附注:有的人会问,为啥不简单粗暴直接跳到摄像头权限管理界面直接让用户开启呢?代码也容易,换个action不就行了?是的,这种思路没错,但是,不同厂家手机打开摄像头权限管理界面的action是不一样的,差别太大,本人验证过,入门到放弃。。。感兴趣的同学可以试试哦,验证一下...(补充:文章写完后,在简书上刚好看到一篇文章很棒地详细讲述action的问题,现在附上:http://www.jianshu.com/p/b5c494dba0bc)

    最后附上github上一个关于权限的讨论链接:https://github.com/android-cn/android-discuss/issues/174#issuecomment-289990995,大家可以看看去。


    相关文章

      网友评论

      • jasonlee3652:非常感谢!解决了困扰我两天的问题,我怎么也没想到用setParameters 去解决魅族权限的问题,呵呵。多谢!
        CaptainJno:很高兴能帮助到你:smile:

      本文标题:Android判断用户开启了摄像头权限

      本文链接:https://www.haomeiwen.com/subject/gaybattx.html