gpt4 book ai didi

c# - zxing 集成到 monodroid 应用程序中

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:06:54 28 4
gpt4 key购买 nike

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

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

最佳答案

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

您可以将 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 必须覆盖 Activity.OnActivityResult方法。

综上所述,移植 IntentIntegrator.java 不应该那么困难,因为它的大部分是 Activity.StartActivityForResult 的包装器具有适当的 Intent 和构造 AlertDialog(您可能需要也可能不需要)。

关于c# - zxing 集成到 monodroid 应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5614830/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com