C# 在Epson TM-U220 USB上打印时出错

C# 在Epson TM-U220 USB上打印时出错,c#,android,xamarin,C#,Android,Xamarin,我有爱普生POS打印机的情况。Epson提供的示例正如预期的那样工作,但是当我尝试在Xamarin BOOM中使用时 我创建了一个Android Java绑定库,添加了一个文件夹“Jars”,并将ePos Prin.jar文件复制到其中,选项EmbeddedJar为Build Action 在我的Android项目中,我将.so文件(本机库)放在“jni/armeabi”文件夹树中,并将构建操作选择为AndroidNativeLibrary。同样在Android项目中,我有一个简单的MainAc

我有爱普生POS打印机的情况。Epson提供的示例正如预期的那样工作,但是当我尝试在Xamarin BOOM中使用时

我创建了一个Android Java绑定库,添加了一个文件夹“Jars”,并将
ePos Prin.jar
文件复制到其中,选项
EmbeddedJar
Build Action

在我的Android项目中,我将.so文件(本机库)放在“jni/armeabi”文件夹树中,并将构建操作选择为
AndroidNativeLibrary
。同样在Android项目中,我有一个简单的
MainActivity
类,它将尝试查找打印机,但无法抛出异常

我使用以下代码行:

使用系统;
使用Android.App;
使用Android.Content;
使用Android.Widget;
使用Android.OS;
使用Com.Epson.Epsonio//来自JBL的库
使用Com.Epson.Eposprint//来自JBL的库
名称空间EpsonPrint
{
[活动(MainLauncher=true)]
公共课活动:活动
{
const int SEND_TIMEOUT=10*1000;
DeviceInfo[]设备列表;
语境;
创建时受保护的覆盖无效(Bundle savedInstanceState)
{
//Load(“$APP/jni/libeposprint.so”);//不起作用
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.Main);
var find=(按钮)findviewbyd(Resource.Id.find);
var print=(按钮)findviewbyd(Resource.Id.print);
mContext=这个;
打印。单击+=委派
{
试一试{
打印();
}捕获(e){
e、 PrintStackTrace();
MakeText(mContext,例如ToString(),ToastLength.Long).Show();
}
};
查找。单击+=委派
{
试一试{
GetDevices();//轰!这里。。。
}捕获(e){
e、 PrintStackTrace();
MakeText(mContext,例如ToString(),ToastLength.Long).Show();
}
};
}
私有设备(){
试一试{
Start(这个,DevType.Usb,“null”);
}捕获(e){
if(e.Status==IoStatus.errinflicle){
Toast.MakeText(这是“搜索已在进行”,ToastLength.Long).Show();
}else if(e.Status==IoStatus.ErrProcessing){
Toast.MakeText(此“无法执行进程”,ToastLength.Long).Show();
}else if(e.Status==IoStatus.ErrParam){
Toast.MakeText(此“传递的参数无效”,ToastLength.Long).Show();
}else if(e.Status==IoStatus.ErrMemory){
Toast.MakeText(这个“无法分配内存”,ToastLength.Long).Show();
}else if(e.Status==IoStatus.ErrFailure){
Toast.MakeText(这是“未指定的错误”,ToastLength.Long).Show();
}
}
}
私人作废打印()
{
mDeviceList=Finder.getDeviceInfo列表(Finder.FilterOne);
var状态=新整数[1];
如果(mDeviceList.Length>0)
{
Finder.Stop();
}
其他的
{
MakeText(mContext,“列表为空”,ToastLength.Long.Show();
}
字符串deviceName=mDeviceList[0]。deviceName;
字符串printerName=mDeviceList[0]。printerName;
int deviceType=mDeviceList[0]。deviceType;
字符串macAddress=mDeviceList[0]。macAddress;
打印打印机=新打印(ApplicationContext);
//日志。(“设备名称:“+deviceName+”\n“+”打印机名称:“+printerName+”\n“+”设备类型:“+String.valueOf(deviceType)+”\n“+”MAC:“+macAddress”,”;
尝试
{
//打印数据生成器
var builder=新生成器(“TM-U220”,builder.ModelAnk,ApplicationContext);
builder.AddText(“ESPON打印测试”);
builder.AddCut(builder.CutFeed);
//如果(生成器!=null){
//Log.i(“BUILDER NOT NULL”,“”);
//                }
//打印机测试生成器
var confirmBuilder=newbuilder(“TM-U220”,Builder.ModelAnk,ApplicationContext);
//开放式打印机
打印机.OpenPrinter(DevType.Usb,deviceName);
//发送测试生成器
printer.SendData(确认生成器、发送超时、状态);
//检查打印机状态
if((状态[0]&Com.Epson.Eposprint.Print.StOffLine)!=Com.Epson.Eposprint.Print.StOffLine)
{
//如果联机,则发送打印数据
//Log.i(“打印机未脱机”,”);
打印机.SendData(生成器、发送超时、状态);
//检查数据是否成功发送
if((状态[0]&Com.Epson.Eposprint.Print.stprintsucture)==Com.Epson.Eposprint.Print.stprintsucture)
{
ClearCommandBuffer();
Toast.MakeText(这是“数据发送成功”,ToastLength.Long).Show();
}
printer.ClosePrinter();
}
else if((状态[0]&Com.Epson.Eposprint.Print.StOffLine)==Com.Epson.Eposprint.Print.StOffLine)
{
Toast.MakeText(这是“打印机脱机”,ToastLength.Long).Show();
}
其他的
{
Toast.MakeText(这是“其他打印机错误”,ToastLength.Long).Show();
}
}
渔获物(EPOSEXE)
public void print () {
        Desktop desktop = Desktop.getDesktop();
        try {
            desktop.print(new File("Docfile.pdf"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }