Android-实现拍照并显示(7.0及以上版本)

本文详细介绍了在Android 7.0及以上版本实现拍照功能的两个关键点:动态权限获取和通过内容提供器显示图片。动态权限获取针对6.0后引入的权限管理系统,需要在运行时请求相机权限。内容提供器用于在7.0版本中正确显示拍摄的照片,涉及修改AndroidManifest.xml、创建xml文件等步骤。
摘要由CSDN通过智能技术生成

7.0以上版本(包括7.0)实现拍照功能有两个需要注意的地方

  • 拍照权限的动态获取
  • 内容提供器的使用

注意⚠️:如果是调用系统相机,是不用动态申请相机权限的!但是如果AndroidManifest.xml里面写了相机权限声明,那么就需要动态申请权限了

动态权限获取

在6.0系统之前,需要指定的权限可以在AndroidManifest.xml文件中进行权限声明
例如:

<user-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

但是这样会涉及到一个安全性问题,在6.0系统之前通过此方法声明的权限会在安装app的时候告诉用户该app需要的所有权限,一旦安装就表示授权,用户没有选择的余地。因此6.0后android将权限分级,不重要的权限可以在AndroidManifest.xml文件中
声明,等级较高(比如涉及到相机,电话等权限)权限则需要动态授权,并且用户可以随时在设置中取消授权。

重要权限可以查阅相关文档
官方说明

获取权限

调用ActivityComapt的requestPermissions的方法

public static void requestPermissions(@NonNull final Activity activity, @NonNull final String[] permissions, @IntRange(from = 0L) final int requestCode)

实例

ActivityCompat.requestPermissions(MainActivity.this,new String [] {
   permission},1);

调用这个方法获取权限后,将会回调MainActivity中的onRequestPermissionsResult()方法,在此方法中可以通过requestCode来判断是否获得到了权限进而进行下一步操作。

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
   
   swich(requestCode){
   
      case 1:
         if(grantResults.length > 0 && grantResults[0]==PackageManager.PERMISSION_GRANTED){
   
           // to do
         }else{
   
           Toast.makeText(this,"You denied the permission",Toast.LENGTH_SHORT).show();
         }
         break;
      default:
   }
     
}
检测系统版本

在实际开发中,为了程序能适应多个版本的系统,需要对系统版本进行检测,从而来执行不同的操作

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
   
       // 7.0 以上    
}else {
   
      // 7.0 以下
}
检测是否某拥有权限
if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.CAMERA)!=PackageManager.PERMISSION_GRANTED){
     
    //to do
   }

PackageManager.PERMISSION_DENIED 表示没有权限
PackageManager.PERMISSION_GRANTED 有权限

通过内容提供器显示图片

详细参考内容提供器 content provider

获取权限
  1. 在androidManifest.XML 文件申请相关权限
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值