Как реализовать обратные вызовы для намерений в Xamarin.Android - PullRequest
0 голосов
/ 15 мая 2018

Я попытался реализовать независимую от платформы оболочку для обмена файлами, которая принимает имя файла и Action в качестве обратного вызова. Несмотря на то, что это работает, я совсем не доволен своим решением для Android.

Что я сейчас делаю: я регистрирую свой обратный вызов с помощью моего MainActivity, который возвращает идентификатор, который я могу использовать для идентификации обратного вызова

int callbackId = MainActivity.Instance.RegisterCallback(completionHandler);

Затем я начинаю ActionShare намерение с

MainActivity.Instance.StartActivityForResult(Intent.CreateChooser(intent, "Select App"), 123 | (callbackId << 8));#

123 - мой идентификатор действия.

В моем MainActivity в OnActivityResult я получаю и перезваниваю с помощью

var callbackId = (requestCode & 0b1111111100000000) >> 8;

if (this.RemoveCallbackById(callbackId, out var callback))
{
    callback();
}

Есть ли лучший способ реализации обратных вызовов для намерений в Xamarin.Android? Я считаю, что должно быть, но, будучи ограниченным передачей только одного 16-битного целого числа в StartActivityForResult, который будет передан в OnActivityResult, возможности кажутся мне весьма ограниченными.

...