6

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

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

4

2 回答 2

4

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

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

然后是从 C# 调用 Java 代码的问题。

在 and 的情况下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的包装器,具有适当的意图和构造AlertDialog(您可能需要也可能不需要)。

于 2011-04-14T03:06:54.743 回答
0

我们现在有和的ZXing端口。 https://github.com/Redth/ZXing.Net.MobileMonoTouchMonodroid

于 2013-01-22T21:09:01.203 回答