在Android Studio中集成ZXing
我将开始解释我所做的所有步骤,最后是什么问题。
- 下载ZXing-2.2 https://code.google.com/p/zxing/downloads/list
- 全部在zxing-2.2中。
- 下载并安装Apache Ant http://www.youtube.com/watch?v=XJmndRfb1TU
- 使用Windows命令行(运行 – > CMD)导航到提取的目录
- 在命令行窗口中 – input“ant -f core / build.xml”,按回车让Apache工作
此时就像是直接将ZXing库集成到我的Android应用程序中
但是Wooops,“Buildfile:core \ build.xml不存在!Build failed。ok。6. 导入ZXing – 缺lesscore / build.xml
现在是的,我有我的core.jar。
- 打开Android Studio,文件 – >导入项目 – >select/ android / in /zxing-2.2/ – >从现有源创build项目 – >项目名称:andoid – >源文件…全部选中下一步 – >库什么都不做)Next – > Modules(android checked)Next – > SDK 1.7 Next – > Finish
随着项目打开 – >生成 – >重build项目
100个错误19个警告
文件 – >项目结构 – >库 – >添加 – > Java – >select我之前创build的core.jar和OK – >库'核心'将被添加到选定的模块。 (android)确定 – >然后在项目结构对话框中确定。
build立 – >重build项目
15个错误20个警告
所有的错误都是错误的:需要不断的expression式,我看到在Android的ZXing项目的开关情况下的错误我改变所有开关如果elses。
0个错误20个警告
好的,现在继续:
文件 – >新build项目 – > zxing_demo下一步 – >下一步 – >空白活动下一步 – >完成
在新项目 – >文件 – >导入模块 – >search并select/ android /确定 – >从现有源创build模块下一步 – >下一步 – >下一步 – >下一步 – >完成
现在我可以在explorer / android / / zging_demoProject /和External Libraries中看到
现在我改变我的代码tu扫描QR
AndroidManifest.xml中
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.zxing_demo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="16" /> <uses-permission android:name="android.permission.CAMERA"/> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" /> <uses-feature android:name="android.hardware.touchscreen" android:required="false" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.zxing_demo.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:clearTaskOnLaunch="true" android:stateNotNeeded="true" android:configChanges="orientation|keyboardHidden" android:name="com.google.zxing.client.android.CaptureActivity" android:screenOrientation="landscape" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:windowSoftInputMode="stateAlwaysHidden" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <intent-filter > <action android:name="com.google.zxing.client.android.SCAN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application>
MainActivity.java
package com.example.zxing_demo; import android.app.Activity; import android.content.Intent; import android.os.Bundle; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent = new Intent("com.google.zxing.client.android.SCAN"); intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); startActivityForResult(intent, 0); } public void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == 0) { if (resultCode == RESULT_OK) { String contents = intent.getStringExtra("SCAN_RESULT"); String format = intent.getStringExtra("SCAN_RESULT_FORMAT"); // Handle successful scan } else if (resultCode == RESULT_CANCELED) { // Handle cancel } } } }
现在testing,运行 – >debugging
和CRASH。
logcat的
08-31 02:58:28.085 20665-20665/com.example.zxing_demo E/AndroidRuntime: FATAL EXCEPTION: main java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.zxing_demo/com.google.zxing.client.android.CaptureActivity}: java.lang.ClassNotFoundException: com.google.zxing.client.android.CaptureActivity at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1891) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992) at android.app.ActivityThread.access$600(ActivityThread.java:127) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4448) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.ClassNotFoundException: com.google.zxing.client.android.CaptureActivity at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61) at java.lang.ClassLoader.loadClass(ClassLoader.java:501) at java.lang.ClassLoader.loadClass(ClassLoader.java:461) at android.app.Instrumentation.newActivity(Instrumentation.java:1023) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1882) ... 11 more
我可以在AndroidManifest.xml中看到这一行
android:name="com.google.zxing.client.android.CaptureActivity"
“CaptureActivity”红色,错误说:无法parsing符号“CaptureActivity”
文件 – >项目结构 – >模块 – > zxing_demo – >依赖关系 – >添加 – >模块依赖 – > android确定 – >应用和确定
现在CaptureActivity看起来不错
再次debugging
08-31 03:06:58.513 21740-21740/com.example.zxing_demo E/AndroidRuntime: FATAL EXCEPTION: main java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.zxing_demo/com.google.zxing.client.android.CaptureActivity}: java.lang.ClassNotFoundException: com.google.zxing.client.android.CaptureActivity at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1891) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992) at android.app.ActivityThread.access$600(ActivityThread.java:127) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4448) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.ClassNotFoundException: com.google.zxing.client.android.CaptureActivity at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61) at java.lang.ClassLoader.loadClass(ClassLoader.java:501) at java.lang.ClassLoader.loadClass(ClassLoader.java:461) at android.app.Instrumentation.newActivity(Instrumentation.java:1023) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1882) ... 11 more
我想我会使用应用程序和意图,但现在我想要做这个工作,如果有人现在怎么样,请告诉我。
我把ZXING整合到一个Android应用程序中,并没有很好的input来源,我会给你提示什么对我有用 – 因为它变得非常简单 。
有一个真正的方便的git仓库,提供zxing android库项目作为一个AAR档案。
所有你需要做的就是添加到你的build.gradle
repositories { jcenter() } dependencies { compile 'com.journeyapps:zxing-android-embedded:3.0.2@aar' compile 'com.google.zxing:core:3.2.0' }
Gradle完成所有的魔法来编译代码,并使其在您的应用程序中可访问。
之后启动扫描仪,使用这个类/方法:从Activity:
new IntentIntegrator(this).initiateScan(); // `this` is the current Activity
从片段:
IntentIntegrator.forFragment(this).initiateScan(); // `this` is the current Fragment // If you're using the support library, use IntentIntegrator.forSupportFragment(this) instead.
有几个自定义选项:
IntentIntegrator integrator = new IntentIntegrator(this); integrator.setDesiredBarcodeFormats(IntentIntegrator.ONE_D_CODE_TYPES); integrator.setPrompt("Scan a barcode"); integrator.setCameraId(0); // Use a specific camera of the device integrator.setBeepEnabled(false); integrator.setBarcodeImageEnabled(true); integrator.initiateScan();
他们有一个样本项目 ,并提供了几个整合的例子:
- AnyOrientationCaptureActivity
- ContinuousCaptureActivity
- CustomScannerActivity
- ToolbarCaptureActivity
如果你已经访问了链接,你会发现我只是从git README中复制粘贴了代码。 如果没有,去那里得到更多的洞察力和代码的例子。
buttion.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new com.google.zxing.integration.android.IntentIntegrator(Fragment.this).initiateScan(); } }); public void onActivityResult(int requestCode, int resultCode, Intent data) { IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); if(result != null) { if(result.getContents() == null) { Log.d("MainActivity", "Cancelled scan"); Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show(); } else { Log.d("MainActivity", "Scanned"); Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show(); } } else { // This is important, otherwise the result will not be passed to the fragment super.onActivityResult(requestCode, resultCode, data); } } dependencies { compile 'com.journeyapps:zxing-android-embedded:3.2.0@aar' compile 'com.google.zxing:core:3.2.1' compile 'com.android.support:appcompat-v7:23.1.0' }
本教程帮助我整合到android studio: http : //wahidgazzah.olympe.in/integrating-zxing-in-your-android-app-as-standalone-scanner/如果下试试这个
只需添加到AndroidManifest.xml
<activity android:name="com.google.zxing.client.android.CaptureActivity" android:configChanges="orientation|keyboardHidden" android:screenOrientation="landscape" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:windowSoftInputMode="stateAlwaysHidden" > <intent-filter> <action android:name="com.google.zxing.client.android.SCAN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
希望这个帮助!
任何人遇到相同的问题,请按照以下简单的步骤进行:
使用选项Import project (Eclipse ADT, Gradle, etc.)
从下载的zxing-master
zip文件中导入项目android
Import project (Eclipse ADT, Gradle, etc.)
然后在应用程序级别的build.gradle
文件中添加build.gradle
2行代码,然后就可以运行了。
太简单了,呃…
dependencies { // https://mvnrepository.com/artifact/com.google.zxing/core compile group: 'com.google.zxing', name: 'core', version: '3.2.1' // https://mvnrepository.com/artifact/com.google.zxing/android-core compile group: 'com.google.zxing', name: 'android-core', version: '3.2.0' }
你总是可以从下面的链接find最新版本的core
和android core
:
https://mvnrepository.com/artifact/com.google.zxing/core/3.2.1 https://mvnrepository.com/artifact/com.google.zxing/android-core/3.2.0