Java Android:将数据从初始活动(启动Zxing scanner)传递到onActivityResult回调

Java Android:将数据从初始活动(启动Zxing scanner)传递到onActivityResult回调,java,android,android-intent,zxing,onactivityresult,Java,Android,Android Intent,Zxing,Onactivityresult,我使用android应用程序中嵌入的android库zxing。在调用initiateScan()方法从我的活动启动扫描仪之前,我设置了一个类变量scanedItemId,以了解单击要扫描的项目: [...] scanedItemId = currentItem.id // The current item where we clicked on. IntentIntegrator qrCodeScanner = new IntentIntegrator(MyActivity.this); qr

我使用android应用程序中嵌入的android库zxing。在调用initiateScan()方法从我的活动启动扫描仪之前,我设置了一个类变量scanedItemId,以了解单击要扫描的项目:

[...]
scanedItemId = currentItem.id // The current item where we clicked on.
IntentIntegrator qrCodeScanner = new IntentIntegrator(MyActivity.this);
qrCodeScanner.setOrientationLocked(false);
qrCodeScanner.initiateScan();
[...]
然后通过onActivityResult方法得到结果。它工作正常,但我的类变量scanedItemId为null,因为活动已重新启动。是否可以保留MyActivity的初始实例(设置好scanedItemId)或将所需的值传递给IntentIntegrator,以使其返回MyActivity的新实例

[...]
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case IntentIntegrator.REQUEST_CODE:
            // Here the scanedItemId is always null.
[...]
如果可能的话,我不想使用硬持久性(如db或文件)来获取ScaneEdItemId值


希望足够清楚

您可以添加更多自定义数据,如下所示:

scanedItemId = currentItem.id // The current item where we clicked on.
IntentIntegrator qrCodeScanner = new IntentIntegrator(MyActivity.this);
quCodeScanner.addExtra("ITEM_ID", scanedItemId);//add your data
qrCodeScanner.setOrientationLocked(false);
qrCodeScanner.initiateScan();
因为您使用的库没有返回您的数据。您可以分叉该库并添加一些代码,如下所示:

在CaptureManager类中 编辑初始值显性方法

if (intent != null) {
    data = intent.getIntExtra("ITEM_ID", 0);//save your data
}
intent.putExtra("ITEM_ID", data);//return your data
结果法

if (intent != null) {
    data = intent.getIntExtra("ITEM_ID", 0);//save your data
}
intent.putExtra("ITEM_ID", data);//return your data
现在在onActivityResult中,您可以获取数据

IntentResult result = IntentIntegrator.parseActivityResult(resultCode, data);
if (result.getOriginalIntent().hasExtra("ITEM_ID")) {
    Toast.makeText(this,"Item Id : " + String.valueOf(result.getOriginalIntent().getIntExtra("ITEM_ID",0)), Toast.LENGTH_LONG).show();
}

您可以添加更多自定义数据,如下所示:

scanedItemId = currentItem.id // The current item where we clicked on.
IntentIntegrator qrCodeScanner = new IntentIntegrator(MyActivity.this);
quCodeScanner.addExtra("ITEM_ID", scanedItemId);//add your data
qrCodeScanner.setOrientationLocked(false);
qrCodeScanner.initiateScan();
因为您使用的库没有返回您的数据。您可以分叉该库并添加一些代码,如下所示:

在CaptureManager类中 编辑初始值显性方法

if (intent != null) {
    data = intent.getIntExtra("ITEM_ID", 0);//save your data
}
intent.putExtra("ITEM_ID", data);//return your data
结果法

if (intent != null) {
    data = intent.getIntExtra("ITEM_ID", 0);//save your data
}
intent.putExtra("ITEM_ID", data);//return your data
现在在onActivityResult中,您可以获取数据

IntentResult result = IntentIntegrator.parseActivityResult(resultCode, data);
if (result.getOriginalIntent().hasExtra("ITEM_ID")) {
    Toast.makeText(this,"Item Id : " + String.valueOf(result.getOriginalIntent().getIntExtra("ITEM_ID",0)), Toast.LENGTH_LONG).show();
}

好的,谢谢,但是我无法从onActivityResult方法中获得额外的结果。我这里也有同样的问题:好的,它确认了使用库的现状,不可能通过它的意图传递数据。显然,我不喜欢使用fork这个库(主要是出于维护的原因),所以要么我尝试使用一个类变量(因为我的活动被终止并重新实例化,所以暂时不起作用),要么我必须找到另一个库。无论如何,谢谢你的解释和花费的时间。好的,谢谢,但是我不能从onActivityResult方法中得到额外的结果。我这里也有同样的问题:好的,它确认了使用库的现状,不可能通过它的意图传递数据。显然,我不喜欢使用fork这个库(主要是出于维护的原因),所以要么我尝试使用一个类变量(因为我的活动被终止并重新实例化,所以暂时不起作用),要么我必须找到另一个库。无论如何,谢谢你的解释和你花的时间。