AndroID 6.0以上的系统使用手机上的硬件需要动态获取权限,动态权限可以使用RxPermissions获取。
参考博客:Android Studio安装Opencv
从Android动态权限到Rxpermissions的实现
OpenCV on Android 开发(1)调用摄像头
1、安装RxPermissions
官方文档
https://github.com/tbruyelle/RxPermissions
参照官方文档修改build.gradle加入如下代码
allprojects { repositorIEs { ... maven { url 'https://jitpack.io' } }}dependencIEs { implementation 'com.github.tbruyelle:rxpermissions:0.10.2'}
示例:
2、AndroIDManifest添加申请的权限代码
<uses-permission androID:name="androID.permission.CAMERA" />
3、activity_main.xml
<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:app="http://schemas.androID.com/apk/res-auto" xmlns:tools="http://schemas.androID.com/tools" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" tools:context=".MainActivity"> <org.opencv.androID.JavaCameraview androID:ID="@+ID/javaCameraview" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" app:camera_ID="back" app:show_fps="true" /></linearLayout>
4、MainActivity.java
package com.example.mycamera;import androID.Manifest;import androID.content.pm.PackageManager;import androID.os.Bundle;import androID.support.v4.app.ActivityCompat;import androID.support.v4.content.ContextCompat;import androID.support.v7.app.AppCompatActivity;import androID.vIEw.SurfaceVIEw;import androID.vIEw.WindowManager;import androID.Widget.Toast;import org.opencv.androID.BaseLoaderCallback;import org.opencv.androID.CameraBrIDgeVIEwBase;import org.opencv.androID.JavaCameraview;import org.opencv.androID.LoaderCallbackInterface;import org.opencv.androID.OpenCVLoader;import org.opencv.core.Mat;import static androID.support.v4.content.PermissionChecker.PERMISSION_GRANTED;public class MainActivity extends AppCompatActivity implements CameraBrIDgeVIEwBase.CvCameraviewListener2 { private JavaCameraview javaCameraview; //static { // System.loadlibrary("opencv_java3"); //} public voID requestPower() { // checkSelfPermission 判断是否已经申请了此权限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { //如果应用之前请求过此权限但用户拒绝了请求,shouldShowRequestPermissionRationale将返回 true。 if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) { } else { ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CAMERA,}, 1); } } } @OverrIDe public voID onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == 1) { for (int i = 0; i < permissions.length; i++) { if (grantResults[i] == PERMISSION_GRANTED) { Toast.makeText(this, "" + "权限" + permissions[i] + "申请成功", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "" + "权限" + permissions[i] + "申请失败", Toast.LENGTH_SHORT).show(); } } } } private BaseLoaderCallback baseLoaderCallback = new BaseLoaderCallback(this) { @OverrIDe public voID onManagerConnected(int status) { switch (status){ case LoaderCallbackInterface.SUCCESS:{ javaCameraview.enableVIEw(); } break; default: super.onManagerConnected(status); break; } } }; @OverrIDe protected voID onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); ge@R_403_5790@ow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); setContentVIEw(R.layout.activity_main); requestPower(); javaCameraview = (JavaCameraview) findVIEwByID(R.ID.javaCameraview); javaCameraview.setVisibility(SurfaceVIEw.VISIBLE); javaCameraview.setCvCameraviewListener(this); } @OverrIDe public voID onPause(){ super.onPause(); if (javaCameraview != null) javaCameraview.disableVIEw(); } @OverrIDe public voID onResume(){ super.onResume(); if (!OpenCVLoader.initDeBUG()){ OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_3_0,this,baseLoaderCallback); }else{ baseLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS); } } @OverrIDe public voID onCameraviewStarted(int wIDth,int height){ } @OverrIDe public voID onCameraviewStopped(){ } @OverrIDe public Mat onCameraFrame(CameraBrIDgeVIEwBase.CvCameraviewFrame inputFrame){ return inputFrame.rgba(); }}
5、运行结果
总结以上是内存溢出为你收集整理的Android开发(一):基于Opencv使用RxPermissions动态权限调用摄像头全部内容,希望文章能够帮你解决Android开发(一):基于Opencv使用RxPermissions动态权限调用摄像头所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)