在Xamarin中使用HTC的蓝牙LE库,这可能吗?

时间:2013-12-19 14:28:49

标签: java android xamarin bluetooth-lowenergy htc-android

以下是目标:为HTC手机创建一个Android应用程序(Android 4.2),使用蓝牙LE与其他BTLE设备进行通信。我必须使用HTC专有的蓝牙LE java库。

我做了以下事情:

  • 创建了一个使用“com.htc.android.bluetooth.le.gatt.jar”和“com.broadcom.bt.jar”文件的Java Bindings Library项目。这会按预期输出(我相信),不会修改Metadata.xaml等。

  • 创建了一个Android类库,它基本上将所有java绑定方法转换为更友好的方法(即Discovery LE设备,提供它们的列表,所有简单连接,读/写它们)。这个项目建立得很好。我在这个项目中引用了绑定库中输出的DLL。

  • 创建了一个Android应用程序(Android 4.2;我会使用4.3并完成此操作,但这不是目标)。此应用程序引用上面的Android类库。

问题:一旦我尝试构建,我就会遇到各种错误:

package com.htc.android.bluetooth.le.gatt does not exist
Line 5 : "extends com.htc.android.bluetooth.le.gatt.BleClientProfile"
    in HTCBleClientProfile.java

它实际上对所有输出的java文件抱怨。对于正在扩展的内容略有不同。

所以我想,如果我只是移动绑定项目创建的生成的java文件呢?我这样做了,所有参考工作都需要正确的工作,但结果却出现了不同的错误。

我做的第一件事是移动生成的类文件。所有类都具有如下属性:

namespace Com.Htc.Android.Bluetooth.LE.Gatt {

// Metadata.xml XPath class reference: path="/api/package[@name='com.htc.android.bluetooth.le.gatt']/class[@name='BleAdapter']"
[global::Android.Runtime.Register ("com/htc/android/bluetooth/le/gatt/BleAdapter", DoNotGenerateAcw=true)]
public partial class BleAdapter : global::Java.Lang.Object {
  /*...*/
}

如果我单独留下所有类,则不会在应用程序项目中生成* .java文件,导致在运行时出现“No Class Found”错误。

所以我将“DoNoGenerateAcw”调整为false,这导致最终生成* .java文件。

此时,现在我为每个构造函数收到错误,这些构造函数接收了我移入的所有类的参数:

Object() in java.lang.object cannot be applied to (com.htc.android.bluetooth.le.gatt.GattID)

这只是众多不同错误中的一个。但它们在一个方面都是相同的:“java.lang.object中的Object()不能应用于(某些类型)”。所以我一直回到我引用DLL的位置(这导致我回到包错误)。

有没有人知道我可以做些什么来解决这个问题?我已经通过电子邮件向Xamarin寻求帮助,也向HTC发送了一些可能的解决方案(比如Java源码,所以我可以将它自己移植到C#这个应用程序)。

提前谢谢!

0 个答案:

没有答案