Android BroadcastReciever - Концепция - PullRequest
0 голосов
/ 24 февраля 2020

Я попытался обернуть голову вокруг Android BroadcastReceiver, но безуспешно. Я пытаюсь реализовать что-то простое:

  1. Прослушивание входящего SMS
  2. Проверить, сохранен ли номер
  3. Если оно сохранено, сделать что-то

Пока я зарегистрировал / создал BroadcastReceiver, и я могу перехватывать входящие сообщения. Я сделал это следующим образом:

public class SmsReceiver extends BroadcastReceiver {


    @Override
    public void onReceive(Context context, Intent intent) {

        if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){

        //do things
  }
 }
}

Я зарегистрировал получателя в файле манифеста следующим образом:

 <receiver
        android:name=".SmsReceiver"
        android:permission="android.permission.BROADCAST_SMS"
        android:exported="true">

        <intent-filter android:priority="2147483647" >
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>

До сих пор все было хорошо. Но вот большое НО: я также создал класс UserManager с несколькими базовыми c задачами, например: добавление нового пользователя, удаление пользователя, проверка существования пользователя и т. Д. c.

Я храню пользователей в HashMap (phoneNumber, Name).

Мои вопросы:

  1. Как передать объект в мой BroadcastReceiver ? (Я хочу иметь доступ к HashMap из класса "UserManager")

  2. Я нашел много тем, касающихся BroadcastReceivers. Некоторые из них сказали, что существует пара способов объявления приемника вещания. Например, вы могли бы сделать это так, как я (объявив это в Манифесте), или вы могли бы сделать что-то более ... основанное на контексте? Как объявить его BroadcastReceiver br = new MyBroadcastReceiver () и зарегистрировать в нем intentFilters. В чем разница? Какой из них мне следует использовать?

  3. Есть ли что-то, что называется "хорошей практикой"? На что следует обратить внимание? Знаете ли вы какой-либо материал, который четко объясняет различные способы использования broadcastReceiver?

1 Ответ

0 голосов
/ 24 февраля 2020
  1. Вы можете использовать внедрение зависимостей. Или просто сохраните ссылку на класс в вашем Приложении, к которому может обратиться getApplicationContext
  2. Разница в том, что - для получателей, объявленных в манифесте, вы можете получать сообщения, даже если ваше приложение находится в разрушенном состоянии. Если ваш широковещательный приемник создан вручную, вы должны создать его до того, как сообщение будет доставлено. Также Android налагает некоторые ограничения на получателей, объявленных в манифесте.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...