BarCode ScannerアプリをインストールせずにZXing QRコードをAndroidアプリに統合しようとしています。
1)まず、ZXing.Zipファイルをダウンロードして解凍しました
2)ZXingプロジェクトをAndroid既存のプロジェクトとして開き、Androidフォルダーに移動して、Androidフォルダーとまた、core.jarファイルをCaptureActivityという名前のZXingプロジェクトに含めます。
3)CaptureActivityプロジェクトを「QRCodeSample」というプロジェクトのライブラリとして使用しました。 (ライブラリとしてCaptureActivityを含めることの問題)
4)私のコードは以下の通りです3:
public class QRCodeSampleActivity extends Activity {
Button b1;
static String contents;
public static final int REQUEST_CODE = 1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
b1 = (Button) findViewById(R.id.button1);
b1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
/*Intent intent = new Intent("com.google.zxing.client.Android.SCAN");
intent.putExtra("com.google.zxing.client.Android.SCAN.SCAN_MODE",
"QR_CODE_MODE");
startActivityForResult(intent, 0);*/
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) {
contents = intent.getStringExtra("SCAN_RESULT");
String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
Log.i("Barcode Result", contents);
Intent i1 = new Intent(QRCodeSampleActivity.this, webclass.class);
startActivity(i1);
// Handle successful scan
} else if (resultCode == RESULT_CANCELED) {
// Handle cancel
Log.i("Barcode Result","Result canceled");
}
}
}
}
マニフェストファイルは次のとおりです。
<uses-permission Android:name="Android.permission.CAMERA"/>
<application
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name" >
<activity Android:name="com.google.zxing.client.Android.CaptureActivity"
Android:screenOrientation="landscape"
Android:configChanges="orientation|keyboardHidden"
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>
<activity
Android:label="@string/app_name"
Android:name=".QRCodeSampleActivity" >
<intent-filter >
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity Android:name=".webclass"></activity>
</application>
</manifest>
また、ライブラリを追加しません
プロジェクトを実行しようとすると、エラーメッセージは次のようになります。
アクティビティComponentInfo {com.qr.code/com.qr.code}をインスタンス化できません:Java.lang.ClassNotFoundException:ローダー内のcom.qr.code dalvik.system.PathClassLoader [/data/app/com.qr.code-1 .apk]
最終的に私は答えを得ました、
ADT 14以降、リソースプロジェクト(R.id.decodeなど)は、ライブラリプロジェクトで定義されたときに定数ではなくなりました
ZXingライブラリで-> Android-> com.google.zxing.client.Android.CaptureActivityHandler.JavaおよびDecodeHandler.Java
これらのクラスswitch caseステートメントの両方をif-elseに置き換えてから、このZXingライブラリをプロジェクトにインポートします。
私自身のプロジェクトの残りのコーディングは同じです... ADT 14に従ってライブラリクラスが更新されないため、ライブラリクラスの問題だけです。
カニカ
すべてのAndroid Studio/Gradleユーザーの場合
わかりました、今日の私の仕事はAndroidアプリケーションにZXINGを統合することであり、入力用の良いソースがなかったので、成功した理由を教えます-原因非常に簡単であることが判明しました(バージョン2. *)。
Zxing AndroidライブラリプロジェクトをAARアーカイブとして提供する、本当に便利なgitリポジトリがあります。
これをbuild.gradleに追加するだけです
repositories {
mavenCentral()
maven {
url "https://raw.github.com/embarkmobile/zxing-Android-minimal/mvn-repo/maven-repository/"
}
}
dependencies {
compile 'com.google.zxing:core:2.2'
compile 'com.embarkmobile:zxing-Android-minimal:1.2.1@aar'
}
gradleはコードをコンパイルするためのすべての魔法を実行し、アプリでアクセスできるようにします。
スキャナーを後で起動するには、次のクラス/メソッドを使用します。
IntentIntegrator.initiateScan(this); // `this` is the current Activity
既にリンクにアクセスしている場合は、git readmeからコードをコピーして貼り付けただけです。そこに行かないと、さらなる洞察とコード例が得られます!
将来の読者に役立つことを願っています。平和:)
リンクで指定された手順に従う必要があります
http://www.androidaz.com/development/zxing-qr-reader-direct-integration
core.jarはからダウンロードできます
http://repo1.maven.org/maven2/com/google/zxing/core/2.2/
あなたのプログラムがまだlibsにcore-2.2.jarを置いてプロジェクトをきれいにするだけなら、上記は私のために働いています
私は同じ問題を抱えていましたが、何時間も苦労してこのように解決しました。ルビライが指しているように
*プロジェクトを右クリック>プロパティ> Android>(タブライブラリの下)Zxingプロジェクトを追加*
ここで説明されているように、Zxingプロジェクトをライブラリとして正しく作成できたと仮定します。 http://damianflannery.wordpress.com/2011/06/13/integrate-zxing-barcode-scanner-into-your- Android-app-natively-using-Eclipse /
MaterialBarcodeScanner:Android Project(Google Mobile Vision APIを使用))で使いやすいバーコードリーダー。
Gradle依存関係を提供する
'com.edwardvanraak:MaterialBarcodeScanner:0.0.6-ALPHA'をコンパイルします
MaterialBarcodeScannerを構築する
private void startScan() {
/**
* Build a new MaterialBarcodeScanner
*/
final MaterialBarcodeScanner mBarcodeScanner
= new MaterialBarcodeScannerBuilder()
.withActivity(MainActivity.this)
.withEnableAutoFocus(true)
.withBleepEnabled(true)
.withBackfacingCamera()
.withText("Scanning...")
.withResultListener(new MaterialBarcodeScanner.OnResultListener() {
@Override
public void onResult(Barcode barcode) {
barcodeResult = barcode;
result.setText(barcode.rawValue);
}
})
.build();
mBarcodeScanner.startScan();
}
ボタンに接続する
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startScan();
}
});
スキャンを開始してください!
Eclipseでzxing 3.2.1をセットアップする手順
Zxingを既存のプロジェクトとしてインポートした後、[プロパティ]> Java Buildpath> [is library](チェックボタン)をチェックしてから、Zxingをライブラリとして追加します。
webclass.class
にQRcodesampleActivity.Java
が存在することを確認してください