Zxing,调用 Fragment 得到 Result
Zxing, call in Fragment and get Result
我遇到以下问题:我试图从片段启动我的扫描仪。但实际上不可能通过此片段中的 onActivityResult 捕获结果。
@Override
public void onClick(View v){
IntentIntegrator integrator = new IntentIntegrator(getActivity());
integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE_TYPES);
integrator.setCaptureActivity(HorizontalActivity.class);
integrator.setOrientationLocked(false);
integrator.initiateScan();
}
我也尝试了示例中的代码
IntentIntegrator.forFragment(getActivity())
但我的问题是我使用的是 .v4.App.FragmentActivity 而 Konstruktor 仅适用于 App.Fragment.
也许你能帮帮我?
在你的片段中试试这个....
IntentIntegrator.forFragment(this).initiateScan();
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if(result != null) {
if(result.getContents() == null) {
//Cancelled
} else {
//"Scanned Result=" + result.getContents()
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
这是我的解决方案,它可以从 activity 或片段中调用。
fun scanQrCode() {
var intent = Intent(activity, ScanQrActivity::class.java)
intent.setAction(Intents.Scan.ACTION);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET)
intent.putExtra(Intents.Scan.PROMPT_MESSAGE, "Scan unit id")
intent.putExtra(Intents.Scan.CAMERA_ID, 0)
intent.putExtra(Intents.Scan.BEEP_ENABLED, true)
intent.putExtra(Intents.Scan.BARCODE_IMAGE_ENABLED, false)
this.startActivityForResult(intent, 1111)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode.equals(1111)) {
val contents = data?.getStringExtra(Intents.Scan.RESULT)
if (contents == null)
Toast.makeText(activity, "Canceled", Toast.LENGTH_LONG).show()
else {
Toast.makeText(activity, contents, Toast.LENGTH_LONG).show()
}
}
}
我遇到以下问题:我试图从片段启动我的扫描仪。但实际上不可能通过此片段中的 onActivityResult 捕获结果。
@Override
public void onClick(View v){
IntentIntegrator integrator = new IntentIntegrator(getActivity());
integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE_TYPES);
integrator.setCaptureActivity(HorizontalActivity.class);
integrator.setOrientationLocked(false);
integrator.initiateScan();
}
我也尝试了示例中的代码
IntentIntegrator.forFragment(getActivity())
但我的问题是我使用的是 .v4.App.FragmentActivity 而 Konstruktor 仅适用于 App.Fragment.
也许你能帮帮我?
在你的片段中试试这个....
IntentIntegrator.forFragment(this).initiateScan();
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if(result != null) {
if(result.getContents() == null) {
//Cancelled
} else {
//"Scanned Result=" + result.getContents()
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
这是我的解决方案,它可以从 activity 或片段中调用。
fun scanQrCode() {
var intent = Intent(activity, ScanQrActivity::class.java)
intent.setAction(Intents.Scan.ACTION);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET)
intent.putExtra(Intents.Scan.PROMPT_MESSAGE, "Scan unit id")
intent.putExtra(Intents.Scan.CAMERA_ID, 0)
intent.putExtra(Intents.Scan.BEEP_ENABLED, true)
intent.putExtra(Intents.Scan.BARCODE_IMAGE_ENABLED, false)
this.startActivityForResult(intent, 1111)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode.equals(1111)) {
val contents = data?.getStringExtra(Intents.Scan.RESULT)
if (contents == null)
Toast.makeText(activity, "Canceled", Toast.LENGTH_LONG).show()
else {
Toast.makeText(activity, contents, Toast.LENGTH_LONG).show()
}
}
}