6

ZXing のバーコード スキャナーを MonoDroid アプリケーションに統合しようとしています。通常の Android (Java) アプリにはIntentIntegration.java と IntentResult.javaがあり、プロジェクトに含めることができます。誰かがそれらを .NET に移植したかどうか疑問に思っていました (csharp プロジェクトに移植されているのを見ませんでした)。また、アプリを操作するために別の方法で ZXing を実装した人がいるかどうかも疑問です。誰かが MonoDroid と統合した場合、ボタン クリック ハンドラーでスキャンを開始するには何をする必要がありますか?

また、誰かが代わりに実装できる他のサードパーティのバーコード スキャナーを持っている場合は、コメントにそれらの提案を入れてください。

4

2 に答える 2

4

最初の質問は、これらのファイルを実際に移植する必要があるかどうかです。:-)

Java ソース コードを Mono for Android プロジェクトに含めることができます。Build アクションを に設定するだけ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);

さらに、ドキュメントには、提供されたアクティビティがActivity.OnActivityResultメソッドIntentIntegratorをオーバーライドする必要があることが記載されています。

とは言っても、移植はそれほど難しく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 に答える