Обслуживание или загрузка завершена не обязательна
На самом деле вам не нужно вводить Service
или регистрироваться на android.intent.action.BOOT_COMPLETED
Некоторые примерыпоказывает, как зарегистрировать / отменить регистрацию BroadcastReceiver
при создании и уничтожении действия.Тем не менее, это полезно для намерений, которые вы ожидаете, только когда приложение открыто (например, для внутренней связи между Service / Activity).
Однако, в случае SMS, вы хотите прослушать намерение всевремя (и не только, когда ваше приложение открыто).
Есть еще один способ
Вы можете создать class
, который расширяет BroadcastReceiver
и зарегистрироваться с желаемыми намерениямичерез AndroidManifest.xml
.Таким образом, BroadcastReceiver
не будет зависеть от вашей активности (и не будет зависеть от жизненного цикла активности)
Таким образом, ваше BroadcastReceiver
будет автоматически уведомлено Android, как только придет SMS, даже еслиВаше приложение закрыто.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest>
...
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<application>
....
<receiver android:name=".MyCustomBroadcastReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
</manifest>
MyCustomBroadcastReceiver.java
public class MyCustomBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent != null) {
String action = intent.getAction();
if(action != null) {
if(action.equals("android.provider.Telephony.SMS_RECEIVED")) {
// DO YOUR STUFF
} else if (action.equals("ANOTHER ACTION")) {
// DO ANOTHER STUFF
}
}
}
}
}
Примечания
Вы можете добавить другие фильтры намерений в AndroidManifest и обрабатывать их все в одном и том же BroadcastReceiver
.
Запускать службу только в том случае, если вы выполните длинную задачу.Вам просто нужно отобразить уведомление или обновить базу данных, просто используйте код выше.