我正在实现一种方法来解码 QR 码并返回 Android 应用程序代码中包含的字符。 我想运行此方法,直到 QR 码成功解码并且不返回空值。
它在第一个循环中正确运行。 但是,当它在第一次循环时无法读取它时,自第二次循环以来它很少解码代码。 有时它也会进入无限循环。
如果您有任何建议,请告诉我。
public String readQRCode(Bitmap file) {
Reader reader = new MultiFormatReader();
Result result = null;
do {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQUEST_IMAGE);
Toast.makeText(this, "Please try again", Toast.LENGTH_LONG).show();
LuminanceSource source = new RGBLuminanceSource(file);
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(
source));
// Decode
try {
result = reader.decode(binaryBitmap);
} catch (NotFoundException e) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQUEST_IMAGE);
Toast.makeText(this, "Please try again", Toast.LENGTH_LONG).show();
e.printStackTrace();
} catch (ChecksumException e) {
e.printStackTrace();
} catch (FormatException e) {
e.printStackTrace();
}
} while (result == null || result.getText() == null);
return result.getText();
}
最佳答案
您创建了一个看似繁忙的等待循环。您需要完全重写逻辑。
startActivityForResult 不返回值,因此您不应该在调用 Activity 时使用同一方法处理结果。您应该在onActivityResult 中进行处理。
请参阅此处的文档: http://developer.android.com/reference/android/app/Activity.html#StartingActivities
就您而言:
- 删除循环,不对 readQRCode 中的“result”执行任何操作
- 添加一个 onActivityResult 方法并在其中执行 startActivityForResult 之后的所有操作
- 如果要循环,请从 startActivityForResult 调用 readQRCode
最终结果不应有任何类型的循环。
顺便说一句:如果您希望我们更正代码,我们还需要查看您当前的 startActivityForResult 中的内容。
关于java - Android应用程序中使用循环解码QR码的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11689722/