[英]Not receiving an Intent back from Zxing barcode scanner
我知道其他人也遇到了这个问题,但是我已经遵循了解决方案,但它仍然对我不起作用。
我创建了一个新的应用程序,它具有1个活动,该活动具有1个按钮(“扫描”按钮)和2个textviews(它们仅用于输出Zxing当前返回的格式名和内容)。
我已经遵循了ScanningViaIntent教程,但似乎并没有达到onActivityResult
下面是我的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final IntentIntegrator integrator = new IntentIntegrator(this);
Button btnScan = (Button) findViewById(R.id.button1);
btnScan.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
integrator.initiateScan();
}
});
}
public void OnActivityResult(int requestCode, int resultCode, Intent intent)
{
Log.i("result", "hit line");
IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
TextView tv1 = (TextView) findViewById(R.id.textView1);
TextView tv2 = (TextView) findViewById(R.id.textView2);
if(scanResult != null)
{
System.out.println("format: " + scanResult.getFormatName());
System.out.println("contents: " + scanResult.getContents());
tv1.setText(scanResult.getFormatName());
tv2.setText(scanResult.getContents());
}
else
{
tv1.setText("ERROR");
}
}
TextView1从未说过“错误”,所以似乎scanResult为null且我的Log.i()行也从未被点击过,因此我认为onActivityResult
甚至没有被按下。
可能与将IntentIntegrator final
化为OnClick()方法有关吗? 当我在OnClick()内创建IntentIntegrator时,我使用了getParent()将Activity传递给构造函数,但这迫使IntentItegrator内的NullReferenceException关闭了我的应用程序。
我是否正确使用图书馆?
谢谢你的时间,
雨披
实际上,您并没有覆盖onActivityResult()
方法,因为您已经实现了OnActivityResult()
。 结果未调用您的方法。 其他一切看起来都正确。
如果使用@Override
注释,这就是您要捕获的东西-好习惯,因为它会捕获到这一点。
您在哪里调用startActivityForResult(..)
? 您可能要使用这样的东西:
Intent intentScan = new Intent(BS_PACKAGE + ".SCAN");
intentScan.addCategory(Intent.CATEGORY_DEFAULT);
// check which types of codes to scan for
if (desiredBarcodeFormats != null) {
// set the desired barcode types
StringBuilder joinedByComma = new StringBuilder();
for (String format : desiredBarcodeFormats) {
if (joinedByComma.length() > 0) {
joinedByComma.append(',');
}
joinedByComma.append(format);
}
intentScan.putExtra("SCAN_FORMATS", joinedByComma.toString());
}
String targetAppPackage = findTargetAppPackage(intentScan);
if (targetAppPackage == null) {
return showDownloadDialog();
}
intentScan.setPackage(targetAppPackage);
intentScan.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intentScan.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
attachMoreExtras(intentScan);
startActivityForResult(intentScan, REQUEST_CODE);
findTargetAppPackage :
private String findTargetAppPackage(Intent intent) {
PackageManager pm = activity.getPackageManager();
List<ResolveInfo> availableApps = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
if (availableApps != null) {
for (ResolveInfo availableApp : availableApps) {
String packageName = availableApp.activityInfo.packageName;
if (targetApplications.contains(packageName)) {
return packageName;
}
}
}
return null;
}
要查看更完整的示例,请转到此处 。
您需要从存储库中获取最新的类https://github.com/zxing/zxing/tree/master/android-integration/src/main/java/com/google/zxing/integration/android
请参阅该类的javadoc以了解如何使用它。 首先添加代码以调用Intent:
IntentIntegrator integrator = new IntentIntegrator(yourActivity);
integrator.initiateScan();
其次,将其添加到您的活动中以处理结果:
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
}
更多信息在这里https://github.com/zxing/zxing/wiki/Scanning-Via-Intent
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.