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

技术标签: 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

智能推荐

打印系统开发(42)——静默打印_静默打印是什么意思-程序员宅基地

文章浏览阅读4.4k次。1.问题描述希望每次打印时,都是用固定的打印机打印并且不希望弹出对话框进行设置,此时便可以设置静默打印。1.1什么是静默打印静默打印即点击打印时不弹出选项窗口和打印机设置窗口直接进行打印。1.2支持静默打印的打印方式零客户端打印、本地打印、服务器端打印支持静默打印。2.静默打印设置方法2.1 零客户端打印设置方法注:只支持 IE点击模板-打印..._静默打印是什么意思

STM32+74HC595:带领你10分钟用对74HC595_74hc595连接stm32-程序员宅基地

文章浏览阅读2.4w次,点赞14次,收藏68次。使用的是STM32CBT8,小模块用起来性价比超级高,资源丰富,移植u/COS及HTTP、MQTT协议等等用起来简直欲罢不能,摇摇欲仙!BUT:IO口资源太少了,我想让你驱动100个LED,你缺告诉我,我的要求太多,你满足不了......还好,找到了74HC595,但是网上很多资源讲的我看了半天才总结、提炼并另辟蹊径出来精髓===============================_74hc595连接stm32

莱昂哈德·欧拉生平及其成就简介_欧拉的物理成就-程序员宅基地

文章浏览阅读4.1k次,点赞2次,收藏8次。莱昂哈德·欧拉(Leonhard Euler ,1707年4月15日~1783年9月18日),瑞士数学家、自然科学家。1707年4月15日出生于瑞士的巴塞尔,1783年9月18日于俄国圣彼得堡去世。欧拉出生于牧师家庭,自幼受父亲的影响。13岁时入读巴塞尔大学,15岁大学毕业,16岁获得硕士学位。欧拉是18世纪数学界最杰出的人物之一,他不但为数学界作出贡献,更把整个数学推至物理的领域。他是数学史上最多产的数学家,平均每年写出八百多页的论文,还写了大量的力学、分析学、几何学、变分法等的课本,《无穷小分析引论》、_欧拉的物理成就

Error: PL/SQL: ORA-00980: 同义词转换不再有效_sql数据库中同义词转换不再有效-程序员宅基地

文章浏览阅读1.5w次。今天在写存储过程的时候,碰到一个问题,在执行存储过程的时候总是报错--同义词转换不再有效,发现一个查询语句中的一个表原来使用的是一个同义词,就试着把这个同义词单独拿出来进行查询操作,发现并没有问题。最后,经过一番努力,发现该同义词并不是直接指向一个实体表,而是指向另一个同义词。所以,将改同义词的指向改为直接指向原实体表的指向,问题得到解决。即同义词指向的 object ow_sql数据库中同义词转换不再有效

idea 怎么修改项目名字和modules配名字_idea修改groupid-程序员宅基地

文章浏览阅读2.5k次。我们会遇到很多场景比如说git拉取一个项目改成自己的 或者架构师搭建架构喊你拿过来用 是不是的改名字。mvn idea:module 这个是生成.iml文件 删除以前的.iml.重新导入工程编辑运行。第五 补充 如果发现你改项目能把原来的项目modules也改了。第二步 改 点击project Stucture。a/是项目名字 name 也是。第三步 改modules。_idea修改groupid

信息论复习—循环码-程序员宅基地

文章浏览阅读5.5k次,点赞12次,收藏70次。信息论复习—循环码_循环码

随便推点

Acrobat 版本校验异常,请检查网络连接是否正常:NotAllowedError;安全性设置禁止访问本属性或方法。_版本校验异常,请检查您的电脑网络连接是否正常-程序员宅基地

文章浏览阅读1.3w次。一、上传企业所得税纳税申报表时,Acrobat提示版本校验异常,请检查您的电脑网络连接是否正常:NotAllowedError;安全性设置禁止访问本属性或方法。二、解决方法打开Acrobat DC 阅读器的然后 在菜单栏 --找到编辑--再选择首选项,添加该文件(如图)或者添加文件夹路径(注意:添加文件夹下面的路径将全部都会有权限,如果不是非必要,可以直接添加文件。)完_版本校验异常,请检查您的电脑网络连接是否正常

贪心算法——C++实现中级案例_c++贪心算法代码-程序员宅基地

文章浏览阅读95次。在贪心算法中,我们每次都选择当前状态下最优决策,然后更新状态,直到达到最终状态。本文将介绍几个经典的贪心算法案例,并给出C++代码实现。有n个任务需要调度,每个任务需要占用一个时间单位,并且有一个冷却期k。贪心算法本身也是一个很好的思维训练工具,可以帮助我们更好地理解问题本质和设计高效的算法。给定一个按升序排列的整数数组,将其划分成多个长度至少为3的连续子序列,每个子序列只包含连续的整数。有m个孩子和n个糖果,每个孩子有对应的贪婪值g_i和每个糖果有对应的大小s_i。贪心算法——C++实现中级案例。_c++贪心算法代码

从jeecg开源代码看泛型类型擦除之妙用_((dict)field.getannotation(dict.class)).dicttable(-程序员宅基地

文章浏览阅读446次,点赞10次,收藏14次。看代码与输出可以看出类型已被擦除,泛型不匹配或不指定只会产生编译告警,并不会产生编译错误,更不会运行错误。_((dict)field.getannotation(dict.class)).dicttable()

Python+GDAL进行影像坐标转换_python gdal transformpoint-程序员宅基地

文章浏览阅读1.1k次。Python实现遥感影像坐标转换_python gdal transformpoint

start-stop-daemon: unable to set gid to 0 (Operation not permitted)-程序员宅基地

文章浏览阅读1.7k次,点赞3次,收藏4次。start-stop-daemon: unable to set gid to 0 (Operation not permitted)_start-stop-daemon: unable to set gid to 0 (operation not permitted)

AndroidStudio ShareSDK集成_cn.sharesdk.framework gradle 地址-程序员宅基地

文章浏览阅读1.1k次。shareSDK集成MOD官网为开发者提供很多的服务,包括推送服务(MobPush)、社会化分享服务(ShareSDK)、手机短信验证功能(SMSSDK)、即时聊天功能(MobIM)、各种常用数据服务(MobAPI)等多种服务。本文主要介绍ShareSDK的集成问题。在官网注册并登录后,创建应用,并记住Appkey 以及App Secret,后面的配置会用到。一、配置gradle 1..._cn.sharesdk.framework gradle 地址

推荐文章

热门文章

相关标签