我正在尝试将ZXing的条形码扫描仪集成到MonoDroid应用程序中。我看到普通的Android(java)应用程序有IntentIntegration.java and IntentResult.java要包含在他们的项目中以提供帮助。我想知道是否有人将这些移植到.NET(我没有看到它们移植到csharp项目中。)?我也想知道是否有人以另一种方式实施ZXing以开始使用他们的应用程序?如果有人与MonoDroid集成,需要做什么才能在按钮点击处理程序中启动扫描?
此外,如果任何人有任何其他3方条码扫描器可以实现,请将这些建议放在评论中。
答案 0 :(得分:4)
第一个问题是,你真的需要移植这些文件吗? : - )
您可以将Java源代码包含在Mono for Android项目中;只需将Build操作设置为AndroidJavaSource
,源代码将被编译为生成的.apk。这也可以使用.jar
个文件来完成。
接下来是invoking the Java code from C#的问题。
对于IntentIntegration.java
和IntentResult.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)
偶然发现了这个似乎非常适合的链接:http://mono-for-android.1047100.n5.nabble.com/Something-Positive-to-Report-Barcode-Scan-td4919739.html
答案 2 :(得分:0)
我们现在拥有ZXing
和MonoTouch
的{{1}}个端口。
https://github.com/Redth/ZXing.Net.Mobile