Получать сообщения, когда они не запущены, Явная трансляция и Неявная трансляция на Xamarin Android - PullRequest
0 голосов
/ 27 апреля 2019

Мой код ниже не работает на androind 8.0+, но работает до 8.0.Таким образом, кажется, что это воспринимается как неявная трансляция.

 [BroadcastReceiver(Enabled = true, Exported = true)]
    [IntentFilter(new[] { "notpackagename.com.IntentReceiver.MySampleBroadcastReceiver" })]
    public class MySampleBroadcastReceiver : BroadcastReceiver
    {
        public override void OnReceive(Context context, Intent intent)
        {
            String value = intent.GetStringExtra("key");
            Console.WriteLine(value);
        }
    }

     var intent = new Intent("notpackagename.com.IntentReceiver.MySampleBroadcastReceiver");
            intent.PutExtra("key", "MySampleBroadcastReceiver");
            SendBroadcast(intent);

Я хочу знать, что определяется как явная или неявная трансляция?

Поскольку мне нужно, чтобы приложение получало сообщение, когда оно неработает , как показано ниже:

https://docs.microsoft.com/en-us/xamarin/android/app-fundamentals/broadcast-receivers

Основное отличие между получателем, зарегистрированным в манифесте, и получателем, зарегистрированным в контексте, заключается в том, что получатель, зарегистрированный в контексте, будет толькоотвечать на широковещательные рассылки во время работы приложения, в то время как зарегистрированный получатель манифеста может отвечать на широковещательные рассылки, даже если приложение не работает.

https://docs.microsoft.com/en-us/xamarin/android/app-fundamentals/broadcast-receivers

Androidопределяет два типа широковещательных рассылок:

Явная широковещательная рассылка - эти типы широковещательных рассылок предназначены для конкретного приложения.Наиболее распространенное использование явной трансляции - это запуск Activity.Пример явной трансляции, когда приложению необходимо набрать номер телефона;он отправит Intent, предназначенный для приложения Phone на Android, и передаст номер телефона, который нужно набрать.Android затем направит намерение в приложение «Телефон».

Неявная трансляция - эти трансляции отправляются всем приложениям на устройстве.Примером неявной трансляции является намерение ACTION_POWER_CONNECTED.Это намерение публикуется каждый раз, когда Android обнаруживает, что аккумулятор устройства заряжается.Android направит это намерение всем приложениям, которые зарегистрировались для этого события.

Обновление

Пожалуйста, исправьте меня, если я ошибаюсь:

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

Фильтр намерений используется для регистрации получателя вещания, чтобы Android мог правильно маршрутизировать сообщения.Фильтр намерений может быть указан во время выполнения (его иногда называют зарегистрированным по контексту получателем или динамической регистрацией) или он может быть статически определен в манифесте Android (зарегистрированном получателе манифеста).

https://docs.microsoft.com/en-us/xamarin/android/app-fundamentals/broadcast-receivers

1 Ответ

0 голосов
/ 29 апреля 2019

Что определяется как явное вещание или неявное вещание?

Явная трансляция

Отправленное намерение - это передача, которая показывает намерение. Указывая имя компонента Intent, он обычно используется, чтобы узнать имя целевого компонента, чтобы вызвать следующий метод. Цель ясна, указав, какой компонент должен быть активирован, что, как правило, реализовано в том же приложении .

Intent.setComponent()
Intent.setClassName()
Intent.setClass()
new Intent(A.this,B.class)

Скрытая трансляция

Это , реализованный Intent Filter , который обычно используется без явного указания имени целевого компонента. Система Android справится с этим намерением, найдя наиболее подходящий компонент на основе действия, категории, данных (URI и типа данных), установленных в неявном намерении. Обычно используется между различными приложениями

Ваш код явной трансляции

Мне нужно приложение, чтобы получать сообщения, когда оно не запущено

На основании моих исследований, это невозможно сделать в явной трансляции. Если приложение закрыто, явная трансляция будет закрыта.

Если вы хотите, чтобы приложение получало сообщения от сервера, и оно не закрывалось системой Android, я предлагаю вам запустить службу на переднем плане, как эта ссылка. Как создать сервис, выполняющий работу в период времени в Xamarin.Forms?

...