0

最初にお伝えしたいのは、私ができることはすべてやったということです。インターネットで 10 個のチュートリアル、スタックで 10 個のスレッドのようにフォローしました。まだ成功していません。

インテント経由でスキャンを使用することをお勧めしている人は知っていますが、私の場合、それはオプションではなく、アプリでネイティブにする必要があります。

zxing ライブラリ (2.1) をダウンロードし、このチュートリアルに従いました

Galaxy S3またはGalaxy Tab 10.1でこのコードをデバッグとして実行すると、結果のインテントを開始するボタンをクリックすると、20秒ほどフリーズした後、プログラムがクラッシュします:com.google.zxing.client.android.SCANまたはcom.google.zxing.client.android.CaptureActivity.

ビープ音、xml ファイルなど、バーコード スキャナー アプリからすべてのリソースをコピーしたことに注意してください。

クラッシュログ

私のコードは以下の通りです:

MainActivity.java

package com.example.philipscan;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    public void scanNow(View view)
    {
        Log.e("test", "button works!");

        Intent intent = new Intent("com.google.zxing.client.android.CaptureActivity");
        startActivityForResult(intent, 3);
    } 

    public void onActivityResult(int requestCode, int resultCode, Intent intent) 
    {
        Log.e("xZing", "Back");
        if (requestCode == 3) 
        {
            if (resultCode == RESULT_OK)
            {
                String contents = intent.getStringExtra("SCAN_RESULT");
                String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
                Log.e("xZing", "contents: "+contents+" format: "+format);
                // Handle successful scan
            } 
            else if (resultCode == RESULT_CANCELED)
            {
                // Handle cancel
                Log.e("xZing", "Cancelled");
            }
        }
    }
}

Android マニフェスト

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.philipscan"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

        <uses-feature android:name="android.hardware.camera"/>
          <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
          <uses-feature android:name="android.hardware.camera.flash" android:required="false"/>
          <uses-feature android:name="android.hardware.screen.landscape"/>
          <uses-feature android:name="android.hardware.wifi" android:required="false"/>
          <uses-feature android:name="android.hardware.touchscreen" android:required="false"/>

        <uses-permission android:name="android.permission.CAMERA"/>
        <uses-permission android:name="android.permission.INTERNET"/>
        <uses-permission android:name="android.permission.VIBRATE"/>
        <uses-permission android:name="android.permission.FLASHLIGHT"/>
        <uses-permission android:name="android.permission.READ_CONTACTS"/>
        <uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.philipscan.MainActivity"
            android:label="@string/app_name" >
            <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>
        <activity
            android:name="com.google.zxing.client.android.CaptureActivity"
            android:label="@string/app_name" >
            <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>

</manifest>

私の SRC フォルダ

私のファイルリスト

私が得ることができるすべての助けにとても感謝しています。

4

2 に答える 2

1

Intent別の方法を作成してみてください

Intent scanIntent = new Intent("com.google.zxing.client.android.SCAN");
scanIntent.putExtra("SCAN_MODE", "ONE_D_MODE");

その後、通常どおり startActivityForResult() を実行します。ONE_D_MODE は、Code39 などの 1D バーコードをスキャンするモードです。

于 2013-04-25T09:54:19.883 に答える
0

プロジェクトからコピーしたこのコードをすべて削除します。それは必要ではなく、理解していないため、ライセンスの下でこのように再利用することは想定されていません: https://code.google.com/p/zxing/wiki/LicenseQuestions

特に、マニフェストをコピーすることは想定されておらず、UI をコピーすることも許可されていません。

代わりに、とにかくインテントを使用しようとしているように見えるので、はるかに簡単です: https://code.google.com/p/zxing/wiki/ScanningViaIntent

于 2013-04-25T11:28:05.723 に答える