调用 zxing 扫描仪后,我回到我的 activity 但在一个新实例中
After calling zxing scanner, I go back to my activity but in a new instance
我在我的 Android 应用程序中使用了库 zxing-android-embedded。在调用 initiateScan() 方法从我的 activity 启动扫描仪之前,我设置了一个 class 变量 scanedItemId 以了解我单击扫描的项目。
我的问题是,当扫描仪 activity 完成后,它返回到我的 activity,但在一个新实例中而不是初始实例(我检查了 onCreate 中的一个断点方法)。所以,我的 class 变量为空。我该怎么做才能使我的初始 activity 实例保持活动状态并确保扫描器返回到它?
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.
[...]
```
您问的是:
What can I do to keep my initial activity instance live and be sure
the scanner goes back to it?
你不能。当您的应用程序进入后台并且扫描仪应用程序需要资源时,Android 将终止您的应用程序以使资源可供扫描仪应用程序使用。这是正常现象,您的应用程序需要足够强大才能处理此问题。如果您需要跟踪应用程序的状态以便在您的应用程序 returns 进入前台时可以继续,那么您需要将该信息保存在某个持久的地方。您有以下选择:
- 共享首选项
- SQLite 数据库
- 使用文件
- 实施
onSaveInstanceState()
按照@David 的说法,我实施了“onSaveInstanceState()”解决方案,效果很好:我刚刚在 activity:
中添加了这个
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putInt("scanedItemIdKey", scanedItemId);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
scanedItemId = savedInstanceState.getInt("scanedItemIdKey");
}
谢谢
我在我的 Android 应用程序中使用了库 zxing-android-embedded。在调用 initiateScan() 方法从我的 activity 启动扫描仪之前,我设置了一个 class 变量 scanedItemId 以了解我单击扫描的项目。
我的问题是,当扫描仪 activity 完成后,它返回到我的 activity,但在一个新实例中而不是初始实例(我检查了 onCreate 中的一个断点方法)。所以,我的 class 变量为空。我该怎么做才能使我的初始 activity 实例保持活动状态并确保扫描器返回到它?
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.
[...]
```
您问的是:
What can I do to keep my initial activity instance live and be sure the scanner goes back to it?
你不能。当您的应用程序进入后台并且扫描仪应用程序需要资源时,Android 将终止您的应用程序以使资源可供扫描仪应用程序使用。这是正常现象,您的应用程序需要足够强大才能处理此问题。如果您需要跟踪应用程序的状态以便在您的应用程序 returns 进入前台时可以继续,那么您需要将该信息保存在某个持久的地方。您有以下选择:
- 共享首选项
- SQLite 数据库
- 使用文件
- 实施
onSaveInstanceState()
按照@David 的说法,我实施了“onSaveInstanceState()”解决方案,效果很好:我刚刚在 activity:
中添加了这个@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putInt("scanedItemIdKey", scanedItemId);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
scanedItemId = savedInstanceState.getInt("scanedItemIdKey");
}
谢谢