返回

Java.Lang.RuntimeException 异常解决指南:Zebra SE4710 扫描器与 EMDK for Xamarin

Android

解决 Zebra SE4710 EMDK 扫描器中的 Java.Lang.RuntimeException

问题简介

在使用 Zebra SE4710 扫描器与 EMDK for Xamarin 时,应用程序可能会在运行时抛出 Java.Lang.RuntimeException: 'stub'(NullReferenceException)异常。

原因分析

该异常通常表明 EMDK 未正确初始化。EMDK 必须在应用程序中正确初始化,才能访问其功能,包括扫描。

解决方案

要解决此异常,请按照以下步骤操作:

1. 检查 EMDK 许可证

确保已将 EMDK 许可证添加到应用程序项目中。许可证可从 Zebra 开发人员门户中获取。

2. 初始化 EMDK

在应用程序的 MainActivity 文件中,在 OnCreate() 方法中,使用以下代码正确初始化 EMDK:

results = EMDKManager.GetEMDKManager(Application.Context, this);

3. 实现 IEMDKListener 接口

MainActivity 类应实现 IEMDKListener 接口,该接口定义了 EMDK 事件的处理方法。

4. 请求运行时权限

扫描功能需要运行时权限,如 CAMERABLUETOOTH。在 MainActivity 中,请求这些权限如下所示:

string[] permissions = { Manifest.Permission.Camera, Manifest.Permission.Bluetooth };
ActivityCompat.RequestPermissions(this, permissions, 0);

5. 处理权限结果

OnRequestPermissionsResult() 方法中,处理权限请求的结果。如果用户授予了所有必要的权限,请继续初始化 EMDK:

if (grantResults.All(x => x == Permission.Granted))
{
    EMDKManager.GetEMDKManager(Application.Context, this);
}

代码示例

以下是修改后的 MainActivity 文件,其中包含上述解决方案:

using Android.App;
using Android.OS;
using Android.Runtime;
using Android.Util;
using Android.Views;
using Android.Widget;
using AndroidX.AppCompat.App;
using Google.Android.Material.Snackbar;
using Symbol.XamarinEMDK;
using Symbol.XamarinEMDK.Barcode;
using System;
using System.Collections.Generic;
using static Symbol.XamarinEMDK.EMDKManager;

namespace ScanningXamarin
{
    [Activity(Label = "@string/app_name", Theme = "@style/AppTheme.NoActionBar", MainLauncher = true)]
    public class MainActivity : AppCompatActivity, IEMDKListener
    {
        // 代码逻辑...

        public void OnClosed()
        {
            // 代码逻辑...
        }

        public void OnOpened(EMDKManager emdkManager)
        {
            // 代码逻辑...
        }

        // 代码逻辑...
    }
}

常见问题解答

1. 为什么 EMDK 初始化很重要?

EMDK 初始化是访问和使用 EMDK 功能的必要步骤,包括扫描。如果不初始化 EMDK,则无法使用其功能。

2. 为什么需要运行时权限?

扫描功能需要访问相机和蓝牙设备,因此需要请求 CAMERABLUETOOTH 运行时权限。

3. 如何处理 EMDK 事件?

通过实现 IEMDKListener 接口可以处理 EMDK 事件,该接口提供对事件处理方法的访问。

4. 如何获取扫描数据?

可以通过为 Scanner 对象添加 Data 事件处理程序来获取扫描数据。

5. 如何在 EMDK 中配置扫描仪设置?

可以通过使用 Scanner.GetConfig()Scanner.SetConfig() 方法来获取和设置扫描仪设置。