は、私が送信されたSMSに耳を傾けるContentObserverを登録しています方法です:無期限に実行する必要があるContentObserverを登録する場所は?ここ
SendSmsObserver smsObeserver = (new SendSmsObserver(new Handler(), context));
ContentResolver contentResolver = context.getContentResolver();
contentResolver.registerContentObserver(Uri.parse("content://sms"), true, smsObeserver);
これはSendSmsObserverクラスです:
class SendSmsObserver extends ContentObserver {
private Context context;
SendSmsObserver(Handler handler, Context context) {
super(handler);
this.context = context;
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
queryLastSentSMS();
}
今の質問はどこでの上位3行を置くべきであるということですコード?現在、私はActivityのOnCreateメソッドでそれを書いています。しかし、これを行うことによって、私はアプリが起動されるたびに呼び出すことになります。私はそれが悪い習慣であるかどうかわからない。
私の必要条件は、アクティビティのライフサイクル外で送信されたSMSを聞くことです。これは期待通りに機能していますが、私は常にOnCreateメソッドで登録する必要がありますか?また、BroadcastReceiverのonReceive()に同じ行を入れて、デバイスをリブートした後にリッスンしていることを確認します。
更新:BroadcastReceiverはContentObserverを登録していません。私もgetApplicationContext()をBroadcastReceiverのコンテキストとして使用しようとしましたが、役に立たなかった。
Android 7.0以降では、 'JobScheduler'を使用してコンテンツの変更を監視できます。これは' ContentObserver'に似ています。これは非常に便利です。古いデバイスではあまり実用的ではありません。 – CommonsWare
それは素晴らしいだろうが、今は古いデバイスをターゲットにする必要があります。 – Usman
更新:BroadcastReceiverは何とかContentObserverを登録していません。私はまた、BroadcastReceiverのコンテキストとしてgetApplicationContext()を使用しようとしましたが、無用にしました – Usman