android 判断摄像头是否可用(6.0以下 )

android 6.0以下系统判断当前摄像头是否可用

问题概述

android 应用程序无法判定当前是否有摄像头的使用权限,是否可用。

附一篇6.0权限的文章,有概论、有图还有代码。轻松解决应用程序判断是否有权限的问题。android 6.0 权限简述、思路分析和代码实践

问题描述

在做ocr 的时候遇到个问题,点击拍照/扫描页面的入口Button,弹出一个对话框 “申请拍照和录像权限” “禁止”/“允许”。如果这个时候点击了“禁止”,或者自己在移动设备的权限设置里把APP的 “拍照和摄像” 权限改为拒绝(或者禁止)。那么当我们在app 中再想调用拍照和摄像的功能就不行了, 有的手机没有任何反应,有的干脆就直接挂掉。

问题分析

android 6.0  Google 对Android的权限做了比较大的修改,比较好处理。问题主要是体现在6.0 以下的系统。

这是我用的一款测试机打印出来的log,忘记是三星还是小米了。
Caused by: Camera permission has been disabled for current app

Camera permission has been disabled for current app

而魅族MX5的比较怪,其他的魅族机没有测试
Caused by: java.lang.RuntimeException: Camera is being used after Camera.release() was called

Camera is being used after Camera.release() was called

最开始的时候还以为是摄像头的资源没有释放掉之类的问题引起的,但是在“权限管理”中把摄像头的权限打开就没有这种问题,真心醉了,为什么会报这样的错误?!!!但是问题肯定是权限导致的。

问题解决

网上有种方法是根据 checkPermission 判断权限,但这是判断是否在清单文件中注册了权限,并不能判断当前的摄像头是否被禁止,可用!

1.  PackageManager pm = getPackageManager();  
2.  boolean permission = (PackageManager.PERMISSION_GRANTED ==   
3.          pm.checkPermission("android.permission.CAMERA ", "packageName"));  
4.  if (permission) {  
5.          showToast("有这个权限");  
6.  }else {  
7.          showToast("木有这个权限");  
8.  }  

找到种可行的处理方法,是用抓取 Camera.open() 异常的方法来解决,比较暴力。

public class PermissionTool {

    /**
     * 判断摄像头是否可用
     * 主要针对6.0 之前的版本,现在主要是依靠try...catch... 报错信息,感觉不太好,
     * 以后有更好的方法的话可适当替换
     *
     * @return
     */
    public static boolean isCameraCanUse() {
        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;
    }
}

而我们可以在APP进入拍照/扫描 页面的入口处,会先针对权限进行检查。如果有摄像头权限,则正常使用;没有摄像头使用权限,可以弹出个权限弹层或者相关提示之类的告诉用户正在使用的app 没有摄像头权限,需要自己开启。

if (PermissionTool.isCameraCanUse()) {

    跳转到相关的拍照/扫描 页面

} else {

    当前APP没有摄像头权限弹层,或者其他相关提示

}

关于问题 “android 6.0以下系统判断当前摄像头是否可用” 目前我是这样处理的,感觉不太好,以后有更好的处理办法再替换吧!

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: Androidx86 6.0是一种针对x86架构的Android操作系统版本。它是基于Android 6.0 Marshmallow开发的,旨在让用户能够在PC硬件上运行Android应用程序。 Androidx86 6.0是一个开源项目,允许用户自由下载、安装和使用。它提供了一种在传统PC之上享受Android生态系统的方式。 安装Androidx86 6.0可以通过将其烧录到USB闪存驱动器或光盘上并引导到计算机来完成。安装后,用户可以享受与在移动设备上相似的Android操作系统体验。用户可以从Google Play商店下载和安装应用程序,使用Android的各种功能和特性。 Androidx86 6.0的优点之一是它在处理器性能和内存管理方面表现出色。由于x86架构的处理器在处理计算和图形方面具有优势,因此它可以提供更流畅的性能。另外,Androidx86 6.0还支持多任务处理,用户可以同时运行多个应用程序。 然而,Androidx86 6.0也有一些限制。首先,它可能不支持所有PC硬件。某些设备的驱动程序可能不兼容,这可能会导致某些功能无法正常使用。此外,由于Android是为触摸屏设计的,因此在没有触摸屏的PC上使用时可能会遇到一些用户界面上的适应性问题。 总体而言,Androidx86 6.0是一种让用户在PC硬件上运行Android操作系统的选择。它可以提供更流畅的性能和多任务处理能力,但也可能存在硬件兼容性和用户界面适应性的问题。 ### 回答2: Android-x86是一个基于x86架构的操作系统。Android-x86 6.0是指Android-x86项目的第六个主要版本,其基于Android 6.0 Marshmallow版本进行改进。通过使用Android-x86 6.0,用户可以在x86架构的计算机上运行Android应用程序。 Android-x86 6.0提供了一种在标准计算机上体验Android操作系统的方式。它允许用户运行Android应用程序,享受Android系统的各种功能和特性。与传统的Android手机不同,Android-x86 6.0可以在桌面计算机或笔记本电脑上运行,并通过鼠标和键盘进行操作。 Android-x86 6.0除了具有Android 6.0 Marshmallow的基本功能外,还对x86架构进行了优化和改进。这使得Android-x86 6.0能够在x86处理器上更高效地运行,并提供更好的性能和稳定性。 对于开发人员和测试人员来说,Android-x86 6.0是一个理想的工具。他们可以使用Android-x86 6.0来在PC上测试他们的应用程序,以确保其在不同设备和分辨率上的兼容性和稳定性。 总之,Android-x86 6.0是一个基于x86架构的Android操作系统,可以在普通计算机上运行Android应用程序。它提供了更广阔的平台供开发人员和测试人员进行应用程序测试和开发。此外,Android-x86 6.0通过优化和改进提供了更好的性能和稳定性。 ### 回答3: Android-x86 6.0是一个基于x86架构的Android操作系统版本。它提供了一个在常规电脑硬件上运行Android应用的平台。Android-x86项目最初是由国际开放源码社区发起的,旨在让终端用户能够在普通计算机上使用流行的Android操作系统。 Android-x86 6.0基于Android Marshmallow版本,提供了众多功能和优化,使其能够更好地在电脑上运行。它支持多任务处理、通知中心和快速设置面板等典型的Android功能。此外,它还具备许多与常规计算机操作系统相似的特性,如窗口化管理、鼠标和键盘支持等。 通过安装Android-x86 6.0,用户可以拥有一个功能齐全的操作系统,可以运行各种Android应用。这对于那些想要体验Android生态系统,但又不想购买Android设备的用户来说非常有吸引力。此外,对于开发人员来说,Android-x86 6.0使他们能够在常规计算机上进行Android应用程序的开发和测试。 总的来说,Android-x86 6.0是一个将Android操作系统带到常规计算机上的项目。它提供了众多功能和优化,使用户能够在电脑上享受Android生态系统的各种应用。无论是对普通用户还是开发人员来说,Android-x86 6.0都是一个值得尝试的版本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值