zxing 库:无法进入 activityforresult

zxing library : unable to get into activityforresult

已解决

我无法访问activity结果代码我不知道我做错了什么。

*我使用了 SCANN 而不是 SCAN,因为我在我的清单中声明了它

我引用了 zxing 库,我也有捕获 activity

我的问题是它正确地调用了扫描仪并且也正确地扫描了它但是无法离开那个 CaptureActivity 并返回到 activity 以获得结果任何人都可以帮助请下面是我的代码。

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class QRReader extends Activity {

TextView tvResult;

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

    tvResult = (TextView) findViewById(R.id.scan_result);

    Button scanBtn = (Button) findViewById(R.id.btnScan);

    // in some trigger function e.g. button press within your code you
    // should add:
    scanBtn.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            try {
                Intent intent = new Intent(
                        "com.google.zxing.client.android.SCANN");

                //tvResult.setText("SCAN_RESULT");

                intent.putExtra("SCAN_MODE", "QR_CODE_MODE,PRODUCT_MODE");
                startActivityForResult(intent, 0);

            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                Toast.makeText(getApplicationContext(), "ERROR:" + e, 1)
                        .show();

            }

        }
    });

}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        finish();
        System.exit(0);
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

// In the same activity you’ll need the following to retrieve the results:
public void onActivityResult(int requestCode, int resultCode, Intent intent) {

    if (requestCode == 0) {

        if (resultCode == RESULT_OK) {
            tvResult.setText(intent.getStringExtra("SCAN_RESULT"));
            Intent i = new Intent(QRReader.this, Fund_Transfer.class);

            Bundle extras = new Bundle();
            extras.putString("QRcode", tvResult.getText().toString());

            i.putExtras(extras);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(i);

        } else if (resultCode == RESULT_CANCELED) {

            tvResult.setText("Scan cancelled.");
        }
    }
}

您是否将此行添加到清单中,如果是,则再次验证。

 <activity
        android:name="com.google.zxing.client.android.CaptureActivity"
        android:configChanges="orientation|keyboardHidden"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
         android:screenOrientation="portrait"
        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>

呼叫意图为

Intent intent = new Intent(
                        "com.google.zxing.client.android.SCAN");
                intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); // QR_CODE,
                                                                // DATA_MATRIX,
                                                                // UPC_E,
                                                                // UPC_A,
                                                                // EAN_8,
                                                                // EAN_13,
                                                                // UPC_EAN_EXTENSION,
                                                                // CODE_128,
                                                                // CODE_39,
                                                                // CODE_93,
                                                                // CODABAR,
                                                                // ITF,
                                                                // RSS14,
                                                                // PDF417,
                                                                // RSS_EXPANDED
                startActivityForResult(intent, REQUEST_CODE);

在你的 onActivityResult() 中它应该是

resultCode == Activity.RESULT_OK

如果这不起作用,请从 here 下载我正在使用的库。将其添加为您的库项目。将以上代码添加到清单文件。希望它有效。它对我有用。

已解决:

我无法更改我的动作名称,因为 CaptureActivity 仅需要 android 动作名称作为 'SCAN'。我错误地更改为 'SCANN'。与在 CaptureActivity 中一样,它检查操作名称 SCAN

<action android:name="com.google.zxing.client.android.SCAN" />