java - 调用 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.
[...]
```
解决方案
您问:
我可以做些什么来保持我的初始活动实例处于活动状态并确保扫描仪返回到它?
你不能。当您的应用程序进入后台并且扫描仪应用程序需要资源时,Android 将终止您的应用程序以使资源可供扫描仪应用程序使用。这是正常的,您的应用程序需要足够强大才能处理此问题。如果您需要跟踪应用程序的状态以便在应用程序返回前台时可以继续,那么您需要将该信息永久保存在某处。你有选择:
- 共享首选项
- SQLite 数据库
- 使用文件
- 实施
onSaveInstanceState()
推荐阅读
- sql-server - 带 JDBC 的 Google 表格 - IP 范围
- sql - SQL Server INSERT INTO table xp_cmdshell - 一行中的多行
- css - 通过 CSS 正确设置 stroke-dasharray
- pandas - 如何将两列或多列附加到同一数据框中的一列
- html - Django:如何从视图中的自定义单选中读取信息
- c# - HttpClient 在 Blazor Webassembly 应用程序中不包含带有请求的 cookie
- c# - 报告和reportviewer控件不在同一个项目中如何访问报告
- php - 在同一个项目 Laravel 7 中实现两个 AuthController(web 和 api)时 Illuminate\Auth\AuthenticationException
- neo4j - Neo4j Desktop:更新安装后自动覆盖数据库
- sql - 将同一表中的其他记录数组添加到每条记录