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.Activity
是null
。
这个案例最奇怪的是,我在测试中使用了两个带有Android 5.0 API 21的三星手机,这个问题只发生在其中一个手机上,另一个手机在调用scanner.Scan
时活动不会被破坏。
注:我很抱歉代码中有任何错误,但由于公司的政策,我只能通过终端服务访问互联网,并且Ctrl + V是禁用的。
问题出在设备上。重置配置后,它工作正常。
这可能不是每个人面对这个问题的最终解决方案,但在我的情况下,这是可以做到的。