因公司的需求,需要做一些安卓方面的开发,权衡许久,确定了使用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