Использование API результатов действий в Xamarin.Android

#xamarin #xamarin.android #onactivityresult #startactivityforresult #activity-result-api

Вопрос:

Похоже, что он не поддерживается должным образом, так как мне нужно реализовать JNI, когда я пытаюсь реализовать IActivityResultCallback интерфейс. Также ActivityResultContract не является универсальным классом, поэтому, когда я наследую его для создания пользовательского контракта, он не является типобезопасным, как в родном Android. Так что, я думаю, в данный момент он вообще непригоден для использования?

Ответ №1:

Вы можете обойти эту проблему, унаследовав от Java.Lang.Object . Что-то вроде этого, вероятно, сработает:

 public class MyActivityResultCallback : Java.Lang.Object, IActivityResultCallback
{
}
 

IActivityResultCallback наследуется от IJavaObject, что делает большинство, если не все интерфейсы Android. Таким образом, Xamarin может взаимодействовать между C# и Java. Это довольно хорошо описано здесь: https://docs.microsoft.com/en-us/xamarin/android/platform/java-integration/working-with-jni#implementing-interfaces