Как прослушать все исходящие sms в Android (с API 20 по 28)

#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 , а не задания или сигналы тревоги.