zxing整合到monodroid应用程序中

时间:2011-04-10 21:25:56

标签: c# android barcode-scanner zxing xamarin.android

我正在尝试将ZXing的条形码扫描仪集成到MonoDroid应用程序中。我看到普通的Android(java)应用程序有IntentIntegration.java and IntentResult.java要包含在他们的项目中以提供帮助。我想知道是否有人将这些移植到.NET(我没有看到它们移植到csharp项目中。)?我也想知道是否有人以另一种方式实施ZXing以开始使用他们的应用程序?如果有人与MonoDroid集成,需要做什么才能在按钮点击处理程序中启动扫描?

此外,如果任何人有任何其他3方条码扫描器可以实现,请将这些建议放在评论中。

3 个答案:

答案 0 :(得分:4)

第一个问题是,你真的需要移植这些文件吗? : - )

您可以将Java源代码包含在Mono for Android项目中;只需将Build操作设置为AndroidJavaSource,源代码将被编译为生成的.apk。这也可以使用.jar个文件来完成。

接下来是invoking the Java code from C#的问题。

对于IntentIntegration.javaIntentResult.java可能就足够了,因为这些类型不支持继承(它们是final)。当然,使用JNIEnv来调用它们上的方法将是PITA,但可以这样做:

// Untested code, provided for demo purposes:

// Handle of the Java class we're invoking
IntPtr IntentResult = 
        JNIEnv.FindClass("com/google/zxing/integration/android/IntentIntegrator");
// Handle of the method to invoke
IntPtr IntentResult_initiateScan = 
        JNIEnv.GetMethodID(IntentResult, "initiateScan", 
            "(Landroid/app/Activity;)Landroid/app/AlertDialog;");
            // method signature can be obtained from `javap -s`
// Invoke the method; return value is an AlertDialog instance
IntPtr rAlertDialog = JNIEnv.CallStaticObjectMethod (
        IntentResult, IntentResult_initiateScan, new JValue (someActivity));
// ...and construct a nice managed wrapper over the Java instance.
AlertDialog alertDialog = new AlertDialog (rAlertDialog);

此外,IntentIntegrator文档提到所提供的活动必须覆盖Activity.OnActivityResult方法。

所有这一切,移植IntentIntegrator.java不应该那个很难,因为大部分都是Activity.StartActivityForResult的包装器,具有适当的意图和构造{{ 1}}(你可能需要也可能不需要)。

答案 1 :(得分:0)

答案 2 :(得分:0)

我们现在拥有ZXingMonoTouch的{​​{1}}个端口。 https://github.com/Redth/ZXing.Net.Mobile