如何在Android中使用Zxing作为库生成条形码

时间:2012-10-04 08:56:26

标签: android barcode zxing

我想创建一个应用程序来生成使用Zxing作为库的条形码。 我想要条形码图像。我在我的主要项目中使用了以下代码。

Intent intent = new Intent("com.google.zxing.client.android.Intents.Encode"); 
intent.setPackage("com.google.zxing.client.android");
intent.addCategory(Intent.CATEGORY_DEFAULT); 
intent.putExtra("ENCODE_FORMAT", "CODE_128");  
intent.putExtra("ENCODE_DATA", "12345678912");
startActivity(intent);

但它给出了错误:

10-04 12:54:27.305: E/AndroidRuntime(399): FATAL EXCEPTION: main
10-04 12:54:27.305: E/AndroidRuntime(399): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.google.zxing.client.android.Intents.Encode pkg=com.google.zxing.client.android (has extras) }
    10-04 12:54:27.305: E/AndroidRuntime(399):  at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1408)
    10-04 12:54:27.305: E/AndroidRuntime(399):  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378)
    10-04 12:54:27.305: E/AndroidRuntime(399):  at android.app.Activity.startActivityForResult(Activity.java:2817)
    10-04 12:54:27.305: E/AndroidRuntime(399):  at android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.java:672)
    10-04 12:54:27.305: E/AndroidRuntime(399):  at android.support.v4.app.Fragment.startActivity(Fragment.java:747)
    10-04 12:54:27.305: E/AndroidRuntime(399):  at com.check.MyFragment.onResume(MyFragment.java:62)
    10-04 12:54:27.305: E/AndroidRuntime(399):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:891)
    10-04 12:54:27.305: E/AndroidRuntime(399):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1053)
    10-04 12:54:27.305: E/AndroidRuntime(399):  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622)
    10-04 12:54:27.305: E/AndroidRuntime(399):  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1371)
    10-04 12:54:27.305: E/AndroidRuntime(399):  at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:418)
    10-04 12:54:27.305: E/AndroidRuntime(399):  at android.os.Handler.handleCallback(Handler.java:587)
    10-04 12:54:27.305: E/AndroidRuntime(399):  at android.os.Handler.dispatchMessage(Handler.java:92)
    10-04 12:54:27.305: E/AndroidRuntime(399):  at android.os.Looper.loop(Looper.java:123)
    10-04 12:54:27.305: E/AndroidRuntime(399):  at android.app.ActivityThread.main(ActivityThread.java:4627)
    10-04 12:54:27.305: E/AndroidRuntime(399):  at java.lang.reflect.Method.invokeNative(Native Method)
    10-04 12:54:27.305: E/AndroidRuntime(399):  at java.lang.reflect.Method.invoke(Method.java:521)
    10-04 12:54:27.305: E/AndroidRuntime(399):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    10-04 12:54:27.305: E/AndroidRuntime(399):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    10-04 12:54:27.305: E/AndroidRuntime(399):  at dalvik.system.NativeStart.main(Native Method)

我也在清单中声明了活动。

<activity
    android:name="com.google.zxing.client.android.CaptureActivity"
    android:configChanges="orientation|keyboardHidden"
    android:screenOrientation="portrait"
    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>

如果我在这里错过了什么,请告诉我。

3 个答案:

答案 0 :(得分:2)

这很困惑。你正在尝试使用Intents(好的,正确的),但不知何故也试图在你的应用程序中添加一堆代码(不需要)并同时尝试声明你的应用程序是我们的应用程序,Barcode Scanner(非常错误且对我们有害) )。

您无需更改清单。立即撤消这些更改,就像现在一样,您从我们的命名空间宣传自己作为我们的应用程序,并告诉其他应用程序您可以响应条形码扫描程序的Intents。以这种方式干扰其他应用程序并不会顺利进行。

删除您复制到项目中的所有核心和Android代码。你不需要它。

相反,你只需要android集成代码。

关注此: http://code.google.com/p/zxing/wiki/ScanningViaIntent

除了您将调用方法来编码条形码,而不是扫描。

答案 1 :(得分:1)

Î会说,你应该在你的清单中声明编码活动。像这样:

<activity android:name=".encode.EncodeActivity"
          android:label="@string/share_name"
          android:stateNotNeeded="true">
  <intent-filter>
    <action android:name="com.google.zxing.client.android.ENCODE"/>
    <category android:name="android.intent.category.DEFAULT"/>
  </intent-filter>
  <!-- This allows us to handle the Share button in Contacts. -->
  <intent-filter>
    <action android:name="android.intent.action.SEND"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <data android:mimeType="text/x-vcard"/>
  </intent-filter>
  <!-- This allows us to handle sharing any plain text . -->
  <intent-filter>
    <action android:name="android.intent.action.SEND"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <data android:mimeType="text/plain"/>
  </intent-filter>
</activity>

如果您尝试在应用程序中发布ZXing代码,请注意,如果用户已经安装了正常的ZXing应用程序,这可能会在您的应用程序中造成一些奇怪的行为。

答案 2 :(得分:0)

你的意图行为是错误的。

Intent intent = new Intent("com.google.zxing.client.android.Intents.Encode"); 

会像

一样改变
Intent intent = new Intent("com.google.zxing.client.android.ENCODE");

试试这个。

Intent intent = new Intent("com.google.zxing.client.android.ENCODE");

intent.putExtra("ENCODE_FORMAT", "CODE_128");
intent.putExtra("ENCODE_DATA", "12345678901");

startActivity(intent);