我使用zxing库提供qrcodes并扫描到应用程序但是我遇到了问题。在尝试扫描时,我尝试了几种方法。推荐:
IntentIntegrator integrator = new IntentIntegrator(this);
integrator.initiateScan();
或意图方法:
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
this.startActivityForResult(intent, 0);
两者似乎都能正常工作,因为扫描应用程序或选择应用程序来处理意图对话框。但是,扫描后,应用程序立即关闭。没有错误也没有结果。再见。
捕获结果的方法,在从不显示super()之后立即注意Log.d。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(LOG_TAG, "resultcode = " + resultCode);
switch (requestCode) {
case IntentIntegrator.REQUEST_CODE:
IntentResult scanResult = IntentIntegrator.parseActivityResult(
requestCode, resultCode, data);
if (scanResult == null) {
return;
}
final String result = scanResult.getContents(); // Your result
if (result != null) {
Log.d(LOG_TAG, "Your result is: " + result);
}
break;
default:
}
}
我在一些教程中看到了如何在AndroidManifest.xml中实现zxing make条目的参考资料。见下文:
<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>
到目前为止我没有运气,缺乏日志并没有帮助我指向任何方向。
我正在使用Android Studio,并为依赖项中的lib设置了gradle:
compile files('libs/core-3.1.1.jar')
compile files('libs/android-integration-3.1.1.jar')
非常感谢帮助。
答案 0 :(得分:0)
试试这个
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
if (scanResult != null) {
// handle scan result
}
// else continue with any other code you need in the method
...
}
答案 1 :(得分:0)
问题不在于zxing,而在于你开始它的方式。 startActivityForResult
方法的第二个参数是requestCode
(documentation)。然后,您将检查requestCode
上的onActivityResult
以处理响应。另外,请勿先在super
中致电onActivityResult
。
例如:
startActivityForResult(intent, 123);
将导致Android使用请求代码123
调用onActivityResultprotected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 123 && resultCode == RESULT_OK) {
//do some stuff...
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
答案 2 :(得分:0)
尝试实现这一点,希望它可能有用。
onCrearte()中的- 调用doScan()方法。
//点击扫描按钮。
Button btn_scan = (Button) findViewById(R.id.stbcheck_btn_scan);
btn_scan.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
doScan();
}
});
doScan():
//条形码扫描选项和API集成
public void doScan() {
IntentIntegrator.initiateScan(this);
}
onActivityResult():
public void onActivityResult(int request, int result, Intent i) {
IntentResult scan=IntentIntegrator.parseActivityResult(request, result, i);
if (scan!=null) {
//format.setText(scan.getFormatName());
//Set the returned content from Scanner to edit text
et_stbNo.setText(scan.getContents());
}
}
注意:您必须调用这些onSavedInstanceState()和onRestoreInstanceState()方法,因为您的活动在更改方向时会被销毁并重新创建。
@Override
public void onSaveInstanceState(Bundle state) {
//state.putString("format", format.getText().toString());
state.putString("contents", et_stbNo.getText().toString());
}
@Override
public void onRestoreInstanceState(Bundle state) {
//format.setText(state.getString("format"));
et_stbNo.setText(state.getString("contents"));
}
希望有所帮助:
答案 3 :(得分:0)
使用以下代码,它适用于我的代码。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if (result != null)
{
if (result.getContents() == null)
{
}
else
{
}
}
else
{
// This is important, otherwise the result will not be passed to the fragment
super.onActivityResult(requestCode, resultCode, data);
}
}