Android开发(一):基于Opencv使用RxPermissions动态权限调用摄像头

Android开发(一):基于Opencv使用RxPermissions动态权限调用摄像头,第1张

概述Android6.0以上的系统使用手机上的硬件需要动态获取权限,动态权限可以使用RxPermissions获取。参考博客:AndroidStudio安装Opencv从Android动态权限到Rxpermissions的实现OpenCVonAndroid开发(1)调用摄像头1、安装RxPermissions官方文档https://github.combruyelle/Rx

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动态权限调用摄像头所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1064351.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存