启动 zxing CaptureActivity 时出现异常

Posted

技术标签:

【中文标题】启动 zxing CaptureActivity 时出现异常【英文标题】:Exception when starting zxing CaptureActivity 【发布时间】:2016-02-23 22:04:19 【问题描述】:

我有一个 android 项目,我在其中添加了 Zxing/Android jar 作为外部 Jar。在我的应用程序中,我尝试使用以下代码通过意图从我自己的活动中启动 CaptureActivity:

// start Google bar-code scanner
Intent intent = new Intent(activity.getApplicationContext(), CaptureActivity.class);
intent.setAction(Intents.Scan.ACTION);

// this stops saving your bar-code in bar-code scanner app's history
intent.putExtra(Intents.Scan.SAVE_HISTORY, false);
// this puts text message on the scanning screen
intent.putExtra(Intents.Scan.PROMPT_MESSAGE, message);
// scan only product bar-codes
intent.putExtra(Intents.Scan.MODE, Intents.Scan.PRODUCT_MODE);

activity.startActivityForResult(intent, 0);

,当我这样做时,我得到了这个异常:

11-21 13:08:33.163: E/AndroidRuntime(6414): java.lang.RuntimeException:无法启动活动 组件信息com.myappname/com.google.zxing.client.android.CaptureActivity: android.view.InflateException:二进制 XML 文件第 17 行:错误 膨胀类 alpha 11-21 13:08:33.163: E/AndroidRuntime(6414): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2205) 11-21 13:08:33.163: E/AndroidRuntime(6414): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2255) 11-21 13:08:33.163: E/AndroidRuntime(6414): 在 android.app.ActivityThread.access$800(ActivityThread.java:142) 11-21 13:08:33.163:E/AndroidRuntime(6414):在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1203) 11-21 13:08:33.163: E/AndroidRuntime(6414): 在 android.os.Handler.dispatchMessage(Handler.java:102) 11-21 13:08:33.163:E/AndroidRuntime(6414):在 android.os.Looper.loop(Looper.java:136) 11-21 13:08:33.163: E/AndroidRuntime(6414):在 android.app.ActivityThread.main(ActivityThread.java:5118) 11-21 13:08:33.163:E/AndroidRuntime(6414):在 java.lang.reflect.Method.invokeNative(Native Method) 11-21 13:08:33.163:E/AndroidRuntime(6414):在 java.lang.reflect.Method.invoke(Method.java:515) 11-21 13:08:33.163: E/AndroidRuntime(6414):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 11-21 13:08:33.163: E/AndroidRuntime(6414): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 11-21 13:08:33.163:E/AndroidRuntime(6414):在 dalvik.system.NativeStart.main(本机方法)11-21 13:08:33.163: E/AndroidRuntime(6414):引起:android.view.InflateException: 二进制 XML 文件第 17 行:膨胀类 alpha 11-21 时出错 13:08:33.163:E/AndroidRuntime(6414):在 android.preference.GenericInflater.createItemFromTag(GenericInflater.java:441) 11-21 13:08:33.163: E/AndroidRuntime(6414): 在 android.preference.GenericInflater.inflate(GenericInflater.java:317) 11-21 13:08:33.163: E/AndroidRuntime(6414): 在 android.preference.GenericInflater.inflate(GenericInflater.java:263) 11-21 13:08:33.163: E/AndroidRuntime(6414): 在 android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:272) 11-21 13:08:33.163: E/AndroidRuntime(6414): 在 android.preference.PreferenceManager.setDefaultValues(PreferenceManager.java:485) 11-21 13:08:33.163: E/AndroidRuntime(6414): 在 android.preference.PreferenceManager.setDefaultValues(PreferenceManager.java:444) 11-21 13:08:33.163: E/AndroidRuntime(6414): 在 com.google.zxing.client.android.CaptureActivity.onCreate(CaptureActivity.java:144) 11-21 13:08:33.163: E/AndroidRuntime(6414): 在 android.app.Activity.performCreate(Activity.java:5275) 11-21 13:08:33.163:E/AndroidRuntime(6414):在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 11-21 13:08:33.163: E/AndroidRuntime(6414): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2169) 11-21 13:08:33.163: E/AndroidRuntime(6414): ... 11 更多 11-21 13:08:33.163: E/AndroidRuntime(6414): 由: java.lang.ClassNotFoundException:找不到类 路径上的“android.preference.alpha”:DexPathList[[zip 文件 "/data/app/com.myappname-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.myappname-1, /vendor/lib, /system/lib]] 11-21 13:08:33.163: E/AndroidRuntime(6414): 在 dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 11-21 13:08:33.163: E/AndroidRuntime(6414): 在 java.lang.ClassLoader.loadClass(ClassLoader.java:497) 11-21 13:08:33.163:E/AndroidRuntime(6414):在 java.lang.ClassLoader.loadClass(ClassLoader.java:457) 11-21 13:08:33.163:E/AndroidRuntime(6414):在 android.preference.GenericInflater.createItem(GenericInflater.java:375) 11-21 13:08:33.163: E/AndroidRuntime(6414): 在 android.preference.GenericInflater.onCreateItem(GenericInflater.java:417) 11-21 13:08:33.163: E/AndroidRuntime(6414): 在 android.preference.GenericInflater.createItemFromTag(GenericInflater.java:428) 11-21 13:08:33.163: E/AndroidRuntime(6414): ... 20 更多

这对我有用,现在我更新了我的 android-support-v7-appcompat 库,现在我遇到了这个错误。我在我的项目中添加了 android-support-v7-appcompat 库作为 android 库。不知道是什么原因造成的。

【问题讨论】:

你指的是哪个xml文件? 你是从片段中调用意图吗? 没有。我通过一些辅助类从我的活动中调用它(实际调用(上述代码)在辅助类中)。 尝试用你的助手类的上下文替换activity.getApplicationContext()... 你是什么意思“你的助手类的上下文”?我的助手类只是一个普通的 java 类,它不扩展 Context。我试过:Intent intent = new Intent(activity, CaptureActivity.class);,其中 activity 是我的调用活动,但我得到了同样的异常。 【参考方案1】:

我通过添加 Zxing 解决了这个问题:

android 项目(作为现有的 Android 项目), android-core 项目(作为现有的 Maven 项目)和 核心项目(作为现有的 Maven 项目)

,在我的工作区中,并在我的应用程序中引用 Zxing android 项目作为 Android 库。 以前我只是在我的应用程序构建路径中添加 Zxing androidcore jar 作为外部 jar。

【讨论】:

以上是关于启动 zxing CaptureActivity 时出现异常的主要内容,如果未能解决你的问题,请参考以下文章

ZXing竖屏扫描

android zxing二维码横屏改竖屏

Android项目实战(四十四):Zxing二维码切换横屏扫描

二维码的扫描和生成--第三方开源--ZXing

Android在zxing库中启动flash

Zxing无法扫码128