Первый вопрос: вам действительно нужно портировать эти файлы? : -)
Вы можете включить исходный код 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
(что может вам понадобиться, а может и не понадобиться).