首页 > 解决方案 > 调用 zxing 扫描仪后,我回到我的活动,但在一个新实例中

问题描述

我在我的 Android 应用程序中使用了 zxing-android-embedded 库。在调用initialScan() 方法从我的活动中启动扫描仪之前,我设置了一个类变量scanedItemId 以了解我单击了哪个项目进行扫描。

我的问题是,当扫描仪活动完成时,它会回到我的活动,但在一个新实例中而不是最初的实例中(我在 onCreate 方法中检查了一个断点)。所以,我的类变量为空。我可以做些什么来保持我的初始活动实例处于活动状态并确保扫描仪返回到它?

public class MyActivity
[...]
scanedItemId = currentItem.id // The current item where we clicked on.
IntentIntegrator qrCodeScanner = new IntentIntegrator(this);
qrCodeScanner.setOrientationLocked(false);
qrCodeScanner.initiateScan();
[...]
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.
[...]
```

标签: javaandroidandroid-intentzxingonactivityresult

解决方案


您问:

我可以做些什么来保持我的初始活动实例处于活动状态并确保扫描仪返回到它?

你不能。当您的应用程序进入后台并且扫描仪应用程序需要资源时,Android 将终止您的应用程序以使资源可供扫描仪应用程序使用。这是正常的,您的应用程序需要足够强大才能处理此问题。如果您需要跟踪应用程序的状态以便在应用程序返回前台时可以继续,那么您需要将该信息永久保存在某处。你有选择:

  • 共享首选项
  • SQLite 数据库
  • 使用文件
  • 实施onSaveInstanceState()

推荐阅读