Android活动破坏时调用ZXing条码扫描器.如何恢复

本文关键字:何恢复 恢复 条码扫描器 ZXing 活动 调用 Android | 更新日期: 2023-09-27 18:04:39

首先,我使用Xamarin和MvvmCross。

在我的ViewModel中,当用户单击按钮时,我使用ZXing MobileBarcodeScanner类来扫描条形码:

var scanner = new MobileBarcodeScanner();
var result = await scanner.Scan();
if (result != null)
{
    CodigoProduto = result.Text;
    InternalPesquisarProduto();
}

扫描后,我运行InternalPesquisarProduto void,在远程服务器上搜索数据,当然,基于所读取的条形码。这个方法在获取数据时也会显示一些加载消息:

Ui.DisplayLoading("Searching...", "Searching data");
// Code that fetches the data
Ui.DismissLoading();

Ui是我的ViewModel上的一个属性,定义如下:

protected IUiInteractor Ui { get; set; }

我通过依赖注入接收它。以下是在这个场景中使用的实现的相关代码:

public class AndroidUiInteractor : IUiInteractor
{
    private IMvxAndroidCurrentTopActivity _mvxCurrentTopActivity;
    public AndroidUiInteractor(IMvxAndroidCurrentTopActivity mvxCurrentTopActivity)
    {
        _mvxCurrentTopActivity = mvxCurrentTopActivity;
    }
    public void DisplayLoading(string title, string message)
    {
        _mvxCurrentTopActivity.Activity.RunOnUiThread(() =>
        {
            _progressDlg = new ProgressDialog(_mvxCurrentTopActivity.Activity);
            // Configuring the title and the message
            _progressDlg.Show();
        });
    }
}

问题是,当scanner.Scan被调用时,我的调用者活动被破坏,所以当我调用Ui.DisplayLoading时,_mvxCurrentTopActivity.Activitynull

这个案例最奇怪的是,我在测试中使用了两个带有Android 5.0 API 21的三星手机,这个问题只发生在其中一个手机上,另一个手机在调用scanner.Scan时活动不会被破坏。

:我很抱歉代码中有任何错误,但由于公司的政策,我只能通过终端服务访问互联网,并且Ctrl + V是禁用的。

Android活动破坏时调用ZXing条码扫描器.如何恢复

问题出在设备上。重置配置后,它工作正常。

这可能不是每个人面对这个问题的最终解决方案,但在我的情况下,这是可以做到的。