Getting started with ZXing on Android

空扰寡人 提交于 2019-12-19 03:57:23

问题


I'm trying to add ZXing to my project (add a button which calls the scanner upon press). I found this: http://groups.google.com/group/android-developers/browse_thread/thread/788eb52a765c28b5 and of course the ZXing homesite: http://code.google.com/p/zxing/, but still couldn't figure out what to include in the project classpath to make it all work!

As for now, I copied the classes in the first link to my project (with some package name changes), and it runs but crashes after pressing the button and trying to install the barcode scanner.

Some code:

private void setScanButton(){
    Button scan = (Button) findViewById(R.id.MainPageScanButton);
    scan.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            IntentIntegrator.initiateScan(MyActivity.this);
        }
    });
}

Resulting error (from logcat):

06-13 15:26:01.540: ERROR/AndroidRuntime(1423): Uncaught handler: thread main exiting due to uncaught exception
06-13 15:26:01.560: ERROR/AndroidRuntime(1423): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=market://search?q=pname:com.google.zxing.client.android }

Ideas?


回答1:


Go here for links.

In the activity that you want to trigger a barcode scan include

IntentIntegrator.initiateScan(YourActivity.this); 

and then also include:

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
            TextView 
        } else if (resultCode == RESULT_CANCELED) {
            // Handle cancel
        }
    }
};

The Barcode Scanner app will handle the actual scanning. If the Barcode Scanner app is not installed, the integrator will prompt them to install it.

----------- From nEx.Software ---------------




回答2:


First, ZXing will not be able to automatically prompt the user to download from the Market on an emulator, because there is no Market on the emulator. You would need to manually install the Barcode Scanner APK on the emulator.

Second, since the emulator does not emulate a camera, Barcode Scanner probably will not do you much good. Most likely you are going to need to test this out on a device.




回答3:


Just add this code to your manifest file, within the application tag:

 <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="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="com.google.zxing.client.android.SCAN" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

Then add the following permission, if it has not already been added, at the top of file:

<uses-permission android:name="android.permission.CAMERA" />




回答4:


Check your AndroidManifest whether you have given the "android:name" attributes correctly for the newly added Activities. You got "ActivityNotFoundException" it is mainly because you may have using a different package name and ZXing is using "com.google.zxing.client.android" package name. When you load the first Activity of the ZXing, give it the absolute class path not the relative path. Then your error will disappear.




回答5:


barcode scanner application is not installed on your emulator which is giving this exception.Below link gives step by step guide how to install the 3rd party application on the emulator:

Install application on emulator




回答6:


if you use the zxing first time,I recommend this project*1*,it's a part of zxing, all you need is import the project and run it.This project is an attempt to make working with QR codes in Android a bit easier. With strongly recommend to bigenner.good luck. At last,thanks Sean Owen;




回答7:


  1. Turn on SD card for the emulator.
  2. Copy link to BarcodeScaner found on ZXing download page
  3. Open browser in emulator and point to link edit box
  4. Enter terminal and command adb shell input text 'https://code.google.com/p/zxing/downloads/detail?name=BarcodeScanner-4.5.1.apk&can=2&q=' - the link is link found on ZXing download page
  5. Link copied to browser so you can download and install it. This solves described issue.



回答8:


I use Zxing in a tab (a Fragment) and use the support library (for Material Design components) so I had to call it like this:

IntentIntegrator integrator = new IntentIntegrator(getActivity()); integrator.forSupportFragment(this).initiateScan();

then in onActivityResult()

    if (resultCode == Activity.RESULT_OK) {
        if (requestCode == IntentIntegrator.REQUEST_CODE) {

            String contents = data.getStringExtra("SCAN_RESULT");
            String format = data.getStringExtra("SCAN_RESULT_FORMAT");
            Log.i(TAG, "Barcode Result: " + contents);
            etc...
        }
    }

and in my Manifest.xml

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

It all works very nicely now. I was not successful just using intents and startActivityForResult(). The scanner would start and fix on the QRcode but did not return.

In my build.grade, I have:

repositories { mavenCentral() maven { url "https://raw.github.com/embarkmobile/zxing-android-minimal/mvn-repo/maven-repository/" } }

compile 'com.google.zxing:core:3.2.1'
compile 'com.embarkmobile:zxing-android-minimal:2.0.0@aar'
compile 'com.embarkmobile:zxing-android-integration:2.0.0@aar'


来源:https://stackoverflow.com/questions/3032857/getting-started-with-zxing-on-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!