首页 > 其他分享 >Android Studio 实现扫码功能

Android Studio 实现扫码功能

时间:2023-02-28 14:56:04浏览次数:51  
标签:Toast 扫码 implementation integrator zxing Studio Android com

因公司的需求,需要做一些安卓方面的开发,权衡许久,确定了使用Android Studio作为开发工具。对于安卓开发,目前还算小白一个,刚接触没几天。

其中一项功能为安卓PDA扫码功能,因为手持设备还未到货,所以使用旧手机为测试机,调用手机的扫码功能。本来以为挺小的一个功能,还不是手到擒来,结果踩了好多大坑,足足用了两天才算把基本功能搞定。

网上查找了大量资料,搞了将近2天也没搞定,但是基本确定要用到zxing(项目下载地址:https://github.com/zxing/zxing)。

先别急着下载

网上有的人说要下载zxing项目,然后复制到自己的项目中,也有说需要把 zxing.jar 或 core-3.5.1.jar 复制到libs下面,反正我是试了半天也不行,乱七八糟的错。

现在就说说我怎么成功的吧,咱们接着看下面,不用下载jar也不用下载zxing项目

1.新建空白项目(或已创建的项目)

2.打开app下的build.grade文件,在 dependencies 下面添加最下面红色两行依赖,然后Sync Now(构建)

dependencies {
    implementation 'androidx.appcompat:appcompat:1.4.1'
    implementation 'com.google.android.material:material:1.5.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

    implementation 'com.journeyapps:zxing-android-embedded:3.6.0'
    implementation 'com.google.zxing:core:3.5.1'
}

3.构建完成后,打开AndroidManifest.xml,添加需要的权限

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />

4.新建一个java类文件,主要的作用是后期自定义扫码页面,因为默认扫码页面时横向的,通过设置CaptureAct ,可以设置成竖向的

import com.journeyapps.barcodescanner.CaptureActivity;
public class CaptureAct extends CaptureActivity {
}

5.在AndroidManifest.xml中添加如下代码,主要功能就是竖向扫码界面

     <activity android:name=".CaptureAct"
            android:screenOrientation="fullSensor"
            android:clearTaskOnLaunch="true"
            android:stateNotNeeded="true"
            android:windowSoftInputMode="stateAlwaysHidden">
        </activity>

6.在需要扫码功能的布局页面(比如activity_main.xml)中添加一个按钮

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="扫码"
        android:id="@+id/btn"/>

7.打开MainActivity的java文件,注册按钮事件(或直接xml文件中 onclick)

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn=findViewById(R.id.btn);
        btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        scan();
    }

    /**
     * 扫码方法
     */
    private void scan() {
        IntentIntegrator integrator = new IntentIntegrator(this);
        // 设置要扫描的条码类型,ONE_D_CODE_TYPES:一维码,QR_CODE_TYPES-二维码
        integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES);
        integrator.setCaptureActivity(CaptureAct.class);
        integrator.setPrompt("扫描条码");
        integrator.setOrientationLocked(false);
        integrator.setCameraId(0);  // 使用默认的相机
        integrator.setBeepEnabled(false); // 扫到码后播放提示音
        integrator.setBarcodeImageEnabled(true);
        integrator.initiateScan();

    }

    /**
     * 扫码结果事件
     * @param requestCode
     * @param resultCode
     * @param data
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if(result != null) {
            if(result.getContents() == null) {
                Toast.makeText(this, "扫码取消!", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(this, "扫描成功,条码值: " + result.getContents(), Toast.LENGTH_LONG).show();
            }
        } else {
            super.onActivityResult(requestCode, resultCode, data);
        }
    }
}

OK了,结束了,是不是很简单,费了我这大劲~~

看下效果吧

      

 

标签:Toast,扫码,implementation,integrator,zxing,Studio,Android,com
From: https://www.cnblogs.com/hlmxlx/p/17164258.html

相关文章

  • 用 Visual Studio 升级 .NET 项目
    现在,你已可以使用VisualStudio将所有.NET应用程序升级到最新版本的.NET!这一功能可以从VisualStudio扩展包中获取,它会升级你的.NETFramework或.NETCore网页......
  • 在android源码中编译ADW_Launcher
    1.下载ADW_Launcher源码 cd/android-2.1/packages/apps/ mkdirADW_Launcher cdADW_Launchergitclonegit://github.com/AnderWeb/android_packages_apps_Launcher.gi......
  • android string.xml文件中的整型和string型代替
    在android的开发中,经常会遇见一句话,比如“我今年23岁了”;这个23需要在程序中生成,但是遇到一个问题,这完整的一句话是一个TextView中的,而不是三个textView拼接成的,而且是引用......
  • Android开发--Intent-filter属性详解
    如果一个Intent请求在一片数据上执行一个动作,Android如何知道哪个应用程序(和组件)能用来响应这个请求呢?IntentFilter就是用来注册Activity、Service和Broadca......
  • Android通过flutter_module引入Flutter,无法热更。
    一、混合开发中启用Flutter的热重启/热加载Flutter开发时,默认自动开启热重启/热更新功能,改动代码后,一旦Ctrl+S保存代码,修改的内容马上会热更新......
  • 梦想Android版CAD控件(安卓CAD二次开发,安卓CAD控件)2023.02.26更新
    下载地址:https://www.mxdraw.com/ndetail_40240.html1. 增加willBeReturnStart事件2. 增加使用OpenGL缓存3. 优化界面响应时间4. 修改在个别图纸上大量的小对象图块,缩......
  • 在Eclipse配置安装Android详细教程(新手)
    下载开发资源1、下载最新的AndroidSDK​​https://code.google.com/android/download.html​​选择Windows版本的SDK,下载后直接解压缩就可以使用,为了在控制台中直接使......
  • Appstore和Androidmarket开发者账号申请的那点事
    作为一个开发者,不可避免的问题就是申请store的账户了,相信很多个人开发者一开始的时候都很迷茫,今天给大家收集整理下appstore和androidmarket的开发者申请流程,希望对大家有所......
  • Android应用实例(一)之---有道辞典VZ.0
    大家好,这是我做的一个简单的有道Android的DEMO,只是简单的雏形。界面设计也有点丑陋呵呵~看看下第一步:思路解析从界面看一共用了三个控件EditText,Button,WebView。其实是四......
  • 关于Android中Spinner的使用
    这是一个关于使用Android中Spinner控件的方法,一个简单的代码及测试效果如下:1、主程序packageext.owen.testSpinner;importandroid.app.Activity;importandroid.os.Bund......