Xamarin .jar绑定 - '无法找到位图'

voj*_*jta 12 c# java android visual-studio xamarin

我有一个.jar带有Java接口的文件MyService,它有一个方法:

boolean printBitmapObject(android.graphics.Bitmap bitmap, byte[] result);
Run Code Online (Sandbox Code Playgroud)

我想.jar在Visual Studio 2015中的Android Xamarin项目中使用C#中的这个文件.我做了以下步骤:

  1. 我创建了一个新的库绑定项目.
  2. 我将.jar文件放入属性设置为Jars的新项目的目录中.BuildActionInputJar
  3. 该项目成功建成.
  4. 我将库绑定项目的引用添加到我的主项目中.

不幸的是,我无法构建我的主项目,因为自动生成的C#代码中存在错误:

    public interface IMyService : global::Android.OS.IInterface
    {
       bool PrintBitmapObject (Bitmap bmp, byte[] result); //"Bitmap" is red underlined
    }
Run Code Online (Sandbox Code Playgroud)

与消息"The type or namespace name 'Bitmap' could not be found (are you missing a using directive or an assembly reference?)".

还有一个自动生成的抽象类IMyServiceStub,它也无法识别Bitmap.而且,它不知道一些自动生成BitmapStub:

public abstract class IMyServiceStub : global::Android.OS.Binder, global::Android.OS.IInterface, IMyService
{
    ...
    protected override bool OnTransact (int code, global::Android.OS.Parcel data, global::Android.OS.Parcel reply, int flags)
    {
        ...
        case TransactionPrintBitmapObject: {
                data.EnforceInterface (descriptor);
                Bitmap arg0 = default (Bitmap); //Bitmap red underlined
                arg0 = BitmapStub.AsInterface (data.ReadStrongBinder ()); //BitmapStub red underlined
                byte [] arg1 = default (byte []);
                var result = this.PrintBitmapObject (arg0, arg1);
                reply.WriteNoException ();
                reply.WriteInt (result ? 1 : 0);
                data.WriteByteArray (arg1);
                return true;
                }
        ...
    }

}
Run Code Online (Sandbox Code Playgroud)

我尝试添加using Bitmap = Android.Graphics.Bitmap到自动生成的文件,但它没有帮助,因为BitmapStub仍然未知,我的更改将在下一次构建期间被覆盖.

我有什么办法可以解决这个问题吗?或者它是Xamarin中的已知错误(我使用的是4.0版)?

HBo*_*omb 0

我已经有一段时间没有玩 Xamarin 了,但是 Android.Graphics.Bitmap 命名空间属于 Java 语言,而不是 C#。因此生成的 C# 代码不会知道有关该命名空间的任何信息。

因此,我会尝试添加using System.Drawing;而不是using Bitmap = Android.Graphics.Bitmap

如果编译器无法识别System.Drawing命名空间,您可能还必须手动添加该 DLL 作为对 C# 项目的引用。

让我知道效果如何。