Интеграция ZXING в приложение Monodroid - PullRequest
6 голосов
/ 11 апреля 2011

Я пытаюсь интегрировать сканер штрих-кода ZXing в приложение MonoDroid.Я вижу, что обычные приложения для Android (java) имеют IntentIntegration.java и IntentResult.java , чтобы помочь в их проекте.Мне было интересно, если кто-то перенес их в .NET (я не видел их в проекте csharp.)?Мне также интересно, кто-нибудь реализовал ZXing по-другому, чтобы начать работать со своим приложением?Если кто-то интегрирован с MonoDroid, что нужно сделать для запуска сканирования в обработчике нажатий кнопок?

Кроме того, если у кого-нибудь есть какой-либо другой сторонний сканер штрих-кода, который может быть реализован вместо этого, поместите эти предложения вкомментарии.

Ответы [ 3 ]

4 голосов
/ 14 апреля 2011

Первый вопрос: вам действительно нужно портировать эти файлы? : -)

Вы можете включить исходный код Java в проект Mono для Android; просто установите действие Build на AndroidJavaSource, и исходный код будет скомпилирован в полученный .apk. Это также может быть сделано с .jar файлами.

Затем встает вопрос , вызывающего код Java из 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 с соответствующим намерением и конструкцией AlertDialog (что может вам понадобиться, а может и не понадобиться).

0 голосов
/ 23 января 2013

Теперь у нас есть ZXing порты для MonoTouch и Monodroid.https://github.com/Redth/ZXing.Net.Mobile

0 голосов
/ 20 июля 2012

Только что наткнулся на эту ссылку, которая выглядит очень кстати: http://mono -for-android.1047100.n5.nabble.com / Something-Positive-to-Report-Barcode-Scan-td4919739.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...