Android studio 实现手机扫描二维码功能

 更新时间:2019年10月24日 14:10:38   作者:陌路~天涯  
这篇文章主要介绍了Android studio 实现手机扫描二维码功能,需要的朋友可以参考下

 安卓手机版本在6.0以后需要动态获取相机权限

1.获取相机权限

<!-- 获取手机相机的权限 -->
  <uses-permission android:name="android.permission.CAMERA" />
  <uses-permission android:name="android.permission.FLASHLIGHT" />

2.添加依赖

implementation 'cn.yipianfengye.android:zxing-library:2.2'

3.activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_gravity="center"
  android:layout_height="wrap_content">

  <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="开启相机扫描"
    android:id="@+id/btn"
    />
</LinearLayout>

4.MainActivity.java

package com.example.a86156.saomiao;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.uuzuche.lib_zxing.activity.CaptureActivity;
import com.uuzuche.lib_zxing.activity.CodeUtils;
import com.uuzuche.lib_zxing.activity.ZXingLibrary;
public class MainActivity extends AppCompatActivity {
  Button btn;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //隐藏系统默认的标题
    ActionBar actionBar = getSupportActionBar();
    if(actionBar!=null){
      actionBar.hide();
    }
    //初始化相机权限
    ZXingLibrary.initDisplayOpinion(this);
    btn = findViewById(R.id.btn);
    btn.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        //先判断手机版本是否在6.0以上,如果在6.0以上则需要动态申请权限
        if (Build.VERSION.SDK_INT > 22) {
          if (ContextCompat.checkSelfPermission(MainActivity.this,
              android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
            //先判断有没有权限 ,没有就在这里进行权限的申请
            ActivityCompat.requestPermissions(MainActivity.this,
                new String[]{android.Manifest.permission.CAMERA}, 1);
          } else {
            //说明已经获取到摄像头权限了 想干嘛干嘛
            Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
            startActivityForResult(intent, 1);
          }
        } else {
          //这个说明系统版本在6.0之下,不需要动态获取权限。
          Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
          startActivityForResult(intent, 1);
        }
      }
    });
  }
  //获取手机相机权限
  @Override
  public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == 1) {
      if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        Intent intent = new Intent(this, CaptureActivity.class);
        startActivityForResult(intent, 1);
      } else {
        Toast.makeText(MainActivity.this, "请打开相机权限", Toast.LENGTH_SHORT).show();
      }
    }
  }
  //处理扫描结果
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
      if (data != null) {
        Bundle bundle = data.getExtras();
        if (bundle == null) {
          return;
        }
        if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS) {
          //获取到扫描的结果
          String result = bundle.getString(CodeUtils.RESULT_STRING);
          Log.d("res:",result);
        }
      }
    }
  }
}

总结

以上所述是小编给大家介绍的Android studio 实现手机扫描二维码功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

相关文章

  • Android编程之重力感应用法分析

    Android编程之重力感应用法分析

    这篇文章主要介绍了Android编程之重力感应用法,结合实例形式较为详细的分析了重力感应的原理、相关概念与实现技巧,需要的朋友可以参考下
    2016-10-10
  • Android编程布局控件之AbsoluteLayout用法实例分析

    Android编程布局控件之AbsoluteLayout用法实例分析

    这篇文章主要介绍了Android编程布局控件之AbsoluteLayout用法,结合实例形式简单分析了Android绝对布局AbsoluteLayout的使用技巧,需要的朋友可以参考下
    2015-12-12
  • Android Socket通信实现简单聊天室

    Android Socket通信实现简单聊天室

    这篇文章主要为大家详细介绍了Android网络编程之Socket通信实现简单聊天室,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Android播放assets文件里视频文件相关问题分析

    Android播放assets文件里视频文件相关问题分析

    这篇文章主要介绍了Android播放assets文件里视频文件相关问题分析,结合Android播放assets文件出现错误的实际问题给出了原因分析与解决方法参考,需要的朋友可以参考下
    2016-08-08
  • Flutter利用SizeTransition实现组件飞入效果

    Flutter利用SizeTransition实现组件飞入效果

    本文将为大家介绍SizeTransition,SizeTransition用于更改子组件的尺寸来实现动画,支持垂直方向或水平方向修改动画。本文将利用其实现组件飞入效果,需要的可以参考一下
    2022-04-04
  • Android查看文件夹大小以及删除文件夹的工具类

    Android查看文件夹大小以及删除文件夹的工具类

    这篇文章主要介绍了Android查看文件夹大小以及删除文件夹的工具类,Android计算文件夹大小和删除目录,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • 详解Android的登录那点事

    详解Android的登录那点事

    本篇为大家介绍的内容包括:1、用户连续多次输错密码,增加验证码验证;2、Android如何通过http请求达到与服务器之间的通讯。内容简单,便于学习。
    2016-12-12
  • Android三种网络通讯方式及Android的网络通讯机制

    Android三种网络通讯方式及Android的网络通讯机制

    在android平台目前提供了三种网络接口可以使用:分别是java.net.*(标准Java接口)、Org.apache接口和Android.net.*(Android网络接口),本文主要给大家介绍android三种网络通讯方式及android的网络通讯机制,小伙伴们一起学习吧
    2015-11-11
  • SQLite数据库在Android中的使用小结

    SQLite数据库在Android中的使用小结

    SQLIte是一款轻型的数据库,占用资源非常低,在嵌入式设备中,可能只需几百k的内存,这篇文章主要介绍了SQLite数据库在Android中的使用,需要的朋友可以参考下
    2024-07-07
  • Android中WebView与Js交互的实现方法

    Android中WebView与Js交互的实现方法

    本文给大家介绍android中webview与js交互的实现方法,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起学习
    2016-05-05

最新评论