二维码扫码-程序员宅基地

技术标签: java  移动开发  

先给大家来个效果图,下面附加代码、资源文件、和Demo:

1、资源文件下载

2、资源文件应用

3、AndroidManifest.xml权限

4、MainActivity代码

5、MainActivity的布局文件代码

6、附加Demo

 

资源文件下载(点击下载,提取码:2laf)

获取到的文件截图(里面包含7个文件):

 资源文件应用:

1.zxing类放在项目中的java下面(如下图):

2.zxing文件下面的类代码引入路径可能跟你的不一样所以要看看

3.除了values中的文件,其他的都可以直接复制进去,values文件要进到里面复制代码,直接替换会换掉你之前的样式

4.libs文件加入后,记得引入“coere-3.0.0.jar”文件

5.layout下面的capture.xml布局文件中的扫描取景框(ViewfinderView)控件改为自己包名下的路径

6.在AndroidManifest.xml文件中加入扫描的Activity

<activity
            android:name="com.example.qrcode.zxing.android.CaptureActivity"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.NoTitleBar" />

AndroidManifest.xml权限(加入以下权限):

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.FLASHLIGHT" />

 MainActivity代码:

package com.example.qrcode;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.example.qrcode.zxing.android.CaptureActivity;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private static final String DECODED_CONTENT_KEY = "codedContent";
    private static final String DECODED_BITMAP_KEY = "codedBitmap";
    private static final int REQUEST_CODE_SCAN = 0x0000;
    private Button btnCode;
    private TextView textData;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView(){
        btnCode = (Button)findViewById(R.id.btnCode);
        textData = (TextView)findViewById(R.id.textData);
        btnCode.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        //动态权限申请
        if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA}, 1);
        } else {
            goScan(); //扫码
        }
    }

    //跳转到扫码页面
    private void goScan(){
        Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
        startActivityForResult(intent,REQUEST_CODE_SCAN);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //扫描二维码、条码回转
        if(requestCode == REQUEST_CODE_SCAN && resultCode == RESULT_OK){
            if(!data.toString().isEmpty()){
                String content = data.getStringExtra(DECODED_CONTENT_KEY); //返回的文本内容
                btnCode.setVisibility(View.GONE); //隐藏按钮
                textData.setText(content); //设置返回的值在文本中
                Bitmap bitmap = data.getParcelableExtra(DECODED_BITMAP_KEY);
            }
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case 1:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    goScan(); //扫码
                } else {
                    Toast.makeText(this, "您拒绝了权限申请,可能无法打开相机扫码", Toast.LENGTH_SHORT).show();
                }
                break;
            default:
        }
    }
}

 MainActivity的布局文件代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="20dp"
    android:gravity="center_vertical|center_horizontal"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btnCode"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="点击扫码"/>
    <TextView
        android:id="@+id/textData"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

 附加Demo(点我下载,提取码:3fcb)

二维码案例就到这里了,如果有什么疑问的话可以给我留言。

感觉还不错的话就给博主赏杯咖啡(上面的效果图中的二维码就是博主的微信收款码),谢谢大家!!!

转载于:https://www.cnblogs.com/Mr-Deng/p/11466763.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30585437/article/details/101710097

智能推荐

物联网IOT选型wifi路由模块串口透传不得不知的秘密_wifi透传与iot-程序员宅基地

文章浏览阅读1.2k次。2020年一场突如其来的疫情灾难袭来,各大经济市场在不同程度被按下了“暂停键”。物联网控制作为新兴行业优势凸显出来,其无接触式的交互方式,远程控制,智能控制车间,给疫情期间的人民带来安全、智能的生活体验。这些物联网控制大多用到了网关信息桥梁来传输—wifi 路由模块。但你知道吗?工程师们想要选择高性价比的wifi路由模块做串口透传,不得不知道wifi路由模块的两大区分:mcu+wifi模块和C..._wifi透传与iot

Ubuntu 17.10 + Cuda9.0 + CUDNN + Tensorflow最正确姿势排坑_cuda9.0 tensorflow1.7 ubuntu-程序员宅基地

文章浏览阅读4.3k次。 博主之前一直使用16.04与win10双系统,但是由于当初安装系统时候引导安装的有点问题,导致ubuntu使用起来一直有些毛病,搞了好久也没搞好,索性就想到干脆重新把系统装一下。作为一个爱尝鲜的用户,使用了这么长时间平平淡淡的长期稳定支持版,还是想要换换口味试试最新的17.10版本,不过鉴于长期支持版的18版本再过不久就会放出来了,估计17.10的寿命和用户数量也不会太多了,也正是这个原..._cuda9.0 tensorflow1.7 ubuntu

笔记_数学建模_数学模型-机器学习&机器学习常用算法_机器学习数学建模-程序员宅基地

文章浏览阅读481次。《数学模型-姜启源》——《机器学习》1、数学规划 (包括全部的规划问题)线性、非线性、动态规划、多目标规划、整数规划2、传染病模型(微分方程)3、稳定性模型包括捕鱼、人口、军事竞赛等等4、概率模型5、博弈模型6、计算机虚拟(数值模拟、动态仿真、蒙特卡罗算法)7、调度问题 (智能算法、遗传算法、多目标规划、数学规划、dijstra算法、Floyd算法)8、智能算法(遗传算法、模拟退火算法、蚁群算法、神经网络)9、微分方程所研究对象与已知因素之间可以用微分方程的形式表示(常微分方程(_机器学习数学建模

fine tune chatgpt_finetune embed chatgpt-程序员宅基地

文章浏览阅读2.1k次。fine tune openAI model ( 微调chatgpt)_finetune embed chatgpt

在stable diffusion中遇到以下问题应该如何解决“当前加载的模型是一个LORA,而不是一个稳定扩散检查点。RuntimeError:”_runtimeerror: the model currently loading is a lor-程序员宅基地

文章浏览阅读414次,点赞7次,收藏2次。如果上述步骤都不能解决您的问题,您可能需要更详细地描述您的代码和错误信息,以便于他人提供更具体的帮助。在描述问题时,请确保提供足够的细节,包括错误消息的完整内容、您使用的代码片段、以及您已经尝试过的解决方法。这可能意味着您尝试使用的模型或权重与您的代码或任务不兼容。如果您是从预训练模型开始,请确保您下载的是稳定扩散模型的权重,而不是其他类型的模型权重。检查您的代码中加载模型的部分,确保您使用了正确的类和方法来加载稳定扩散模型。确认您加载的模型文件确实是稳定扩散模型,而不是LORA模型。_runtimeerror: the model currently loading is a lora instead of a stable diff

error: macro "toLine" requires 2 arguments, but only 1 given      QLine toLine() const;_macro "_min" requires 2 arguments, but only 1 give-程序员宅基地

文章浏览阅读2.6k次。/include/qt/QtCore/qvariant.h:307:18: error: macro "toLine" requires 2 arguments, but only 1 given QLine toLine() const; ^include/qt/QtCore/qvariant.h:307:11: error: expected ‘..._macro "_min" requires 2 arguments, but only 1 given

随便推点

svc: failed to register lockdv1 RPC service (errno 111).-程序员宅基地

文章浏览阅读1.6k次。挂载时,用mount -t nfs 192.168.1.105:/ /mnt/nfs时出现svc: failed to register lockdv1 RPC service (errno 111)改为mount -t nfs -o nolock 192.168.1.105:/ /mnt/nfs就行了。全部配置步骤:1、进入配置文件,输_failed to register lockdv1 rpc service (errno 111)

python判断数字位数_Python中的位数,之,判断,数字-程序员宅基地

文章浏览阅读3.9k次。这里是一段防爬虫文本,请读者忽略。本文原创首发于CSDN,作者IDYS博客首页:https://blog.csdn.net/weixin_41633902/本文链接:https://blog.csdn.net/weixin_41633902/article/details/107440627未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!写在开头的话请记住:实践是掌握知识的最快方法如果..._python判断一个数是几位数

ImportError: cannot import name Template解决方案_importerror: cannot import name 'prompttemplate' f-程序员宅基地

文章浏览阅读6.2w次,点赞12次,收藏11次。本文主要介绍了ImportError: cannot import name Template解决方案,希望能对学习python的同学们有所帮助。文章目录1. 问题描述2. 原因分析3. 解决方案_importerror: cannot import name 'prompttemplate' from 'langchain.prompts.cha

Laravel随笔 Windows下Redis安装/php安装redis扩展_windows laravel 8使用 phpredis 扩展来连接 redis-程序员宅基地

文章浏览阅读164次。下载redis windows版 https://github.com/microsoftarchive/redis/releases (msi版本可以一键安装)PHP安装redis扩展 https://www.cnblogs.com/enjie/p/7978879.htmlPHP安装igbinary扩展 https://pecl.php.net/package/igbinary/3.1...._windows laravel 8使用 phpredis 扩展来连接 redis

同声传译免费软件app哪个好?让国际交流变得轻松又有趣-程序员宅基地

文章浏览阅读832次,点赞14次,收藏18次。软件能够实现几乎无延迟的语音翻译,让我们能够即时理解对方的意图并作出快速的回应。这一过程中,翻译结果的呈现流畅且准确,为我们提供了近乎无缝的跨语言交流体验。DeepL Translator的翻译结果准确度高,能够准确地把握原文的含义,避免了歧义和误解的产生。它拥有直观简洁的界面,操作简单方便。它采用了先进的语音识别和机器翻译技术,结合大量的语料库进行训练,确保翻译结果的准确性和流畅性。

一文详解opencv摄像头数字识别_摄像头数字识别在其他场景下识别不了-程序员宅基地

文章浏览阅读1.4w次,点赞32次,收藏286次。本文的目标是实现识别摄像头图像中的数字。实际应用场景包括 车牌号识别 ,部分竞赛的 A4纸打印数字识别 。摄像头数字识别分为两个步骤:1. 提取图像中的ROI区域,如截取车牌的矩形区域,或截取A4纸的图像。2. 对ROI区域进行数字识别。数字识别相对来说较为简单,先介绍数字识别的方法和原理。_摄像头数字识别在其他场景下识别不了

推荐文章

热门文章

相关标签