Android Studio 实现扫码功能

因公司的需求,需要做一些安卓方面的开发,权衡许久,确定了使用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了,结束了,是不是很简单,费了我这大劲~~

看下效果吧

      

 

posted @   v迷糊v  阅读(1893)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示