tha*_*mes 6 c# android barcode-scanner zxing xamarin.android
我正在尝试将ZXing的条形码扫描仪集成到MonoDroid应用程序中.我看到普通的Android(java)应用程序将IntentIntegration.java和IntentResult.java包含到他们的项目中以提供帮助.我想知道是否有人将这些移植到.NET(我没有看到它们移植到csharp项目中.)?我也想知道是否有人以另一种方式实施ZXing以开始使用他们的应用程序?如果有人与MonoDroid集成,那么在按钮点击处理程序中启动扫描需要做些什么?
此外,如果任何人有任何其他3方条码扫描器可以实现,请将这些建议放在评论中.
第一个问题是,您真的需要移植这些文件吗?:-)
您可以将 Java 源代码包含到 Mono for Android 项目中;只需将“构建”操作设置为AndroidJavaSource,源代码就会被编译到生成的 .apk 中。这也可以通过文件来完成.jar。
接下来就是从C#调用Java代码的问题了。
对于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);
Run Code Online (Sandbox Code Playgroud)
此外,IntentIntegrator文档提到提供的 Activity 必须重写Activity.OnActivityResult方法。
话虽如此,移植IntentIntegrator.java不应该那么困难,因为它的大部分都是Activity.StartActivityForResult 的包装器,具有适当的意图和构造AlertDialog(您可能需要也可能不需要)。
| 归档时间: |
|
| 查看次数: |
3010 次 |
| 最近记录: |