#android
#Android
Вопрос:
Я разрабатываю приложение для Android, которое обнаруживает исходящие sms и сохраняет в базе данных room. Я ориентируюсь на новые версии Android с API 22 по 28. Для входящих sms я использую приемник (RECEIVE_SMS). Но для исходящих sms я пытаюсь использовать класс ContentResolver. Но это не гарантирует, что сработает. Иногда не работает.
Я запускаю его из MainActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (!hasReadSmsPermission()) {
showRequestPermissionsInfoAlertDialog();
}
ContentResolver contentResolver = getContentResolver();
contentResolver.registerContentObserver(Uri.parse("content://sms"), true, new SmsObserver(new Handler(), getApplicationContext()));
SetAlarmPeriodically.schedulePeriodic();
}
и используйте onbootreceiver для перезапуска ContentResolver
public class OnBootReceiver extends BroadcastReceiver {
@SuppressLint("UnsafeProtectedBroadcastReceiver")
@Override
public void onReceive(Context context, Intent intent) {
JobManager.create(context).addJobCreator(new MyJobCreator());
SetAlarmPeriodically.schedulePeriodic();
}
}
onRunJob
@NonNull
@Override
protected Result onRunJob(@NonNull Job.Params params) {
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
ContentResolver contentResolver = getContext().getContentResolver();
contentResolver.registerContentObserver(Uri.parse("content://sms"), true, new SmsObserver(new Handler(), getContext()));
}
});
return Result.SUCCESS;
}
Но это не сработало после перезагрузки телефона. Как я могу прослушивать все исходящие sms каждый раз после установки приложения? Какие-либо гарантированные решения?
Комментарии:
1. Такая регистрация
ContentObserver
, вероятно, не будет работать на Android Q и выше, если только ваше приложение не является выбранным пользователем клиентом обмена сообщениями. Это также не будет работать, как только Android завершит ваш процесс, поскольку вы ничего не делаете для поддержания вашего процесса. И, если вы планировали распространять это приложение через Play Store, оно может быть отклонено.2. Я это знаю. Я использую только на одном телефоне, которого нет в Play Store. У вас есть какое-либо решение?
3. Используйте передний план
Service
, а не задания или сигналы тревоги.