Я попытался реализовать независимую от платформы оболочку для обмена файлами, которая принимает имя файла и 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
, возможности кажутся мне весьма ограниченными.