Xamarin.Forms 中的 USB 列表设备

Usb List Devices in Xamarin.Forms

我尝试在 xamarin.forms 内列出通过串行 odt 与智能手机连接的 USB 设备。 为此,我使用这个项目 https://github.com/anotherlab/UsbSerialForAndroid

如何在与来自 Project.Droid.MainActivity 的设备的共享项目中进行列表视图?我尝试使用依赖服务来做到这一点:

这是我的第 1 页(我想要列表视图):

 public partial class Page1 : ContentPage {


    public Page1()
    {
        InitializeComponent();
        DependencyService.Get<Interface1>().moj();
       
    }

}

我的界面:

    namespace SensDxMobileApp.Views.MainWindow {
   public interface Interface1 {
        void moj();
    }
}

和MyActivity(Droid项目):

    [assembly: Xamarin.Forms.Dependency(typeofProject.Droid.MainActivity))]
    namespace Project.Droid {
    public class MainActivity: Interface
{
       protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            listView = new Android.Widget.ListView;
        }

      public async void moj()
            {
    
                adapter = new UsbSerialPortAdapter(this);
                
                listview.Adapter = adapter;
                listView.ItemClick += async (sender, e) =>
                {
                    await OnItemClick(sender, e);
                };
    
                 await PopulateListAsync();
    
                
                detachedReceiver = new UsbDeviceDetachedReceiver(this);
                RegisterReceiver(detachedReceiver, new IntentFilter(UsbManager.ActionUsbDeviceDetached));
                
            }
    }

但是我在 Page1();

中的“DependencyService.Get().moj()”上遇到错误“对象引用未设置到对象的实例。”

有人做过类似的事情吗?谢谢

如果您采用 DependencyService 路线,那么您需要创建一个单独的 class 来实现 Interface1 并将其注册为依赖服务。我认为您不能将 MainActivity 注册为 DependencyService 实现。

您将遇到的一个问题主要是异步代码和回调。

您也不应该将 Android ListView 更新为 DependencyService 调用。这将更适合作为自定义渲染器。作为 DependencyService 实现,您可能希望 moj() 方法能够获取 return 数据,以便 Xamarin.Forms 代码使用。你需要的不仅仅是那种方法。您将需要代码来初始化 UsbSerialPort class,代码来查询设备列表,然后调用回调来发回该列表,无论如何在理论上。我从未使用 Forms 测试过该库。