3 つの未読 SMS メッセージがネイティブ (電話) に存在し、ユーザーが SMS の 1 つを読んだ場合。アプリケーションで (ネイティブから) 読み取られた SMS を識別する方法。
現在、私は ContentObserver を使用しており、ユーザーがネイティブ (電話) から SMS を読み取るときに onChange() メソッドが呼び出されます。
すべての未読 SMS メッセージを取得できます。
Cursor cursor = this.getContentResolver().query(Uri.parse("content://sms/"), null, "read = 0", null, null);
どの SMS がネイティブ (電話) から読み取られたかを識別する方法。ヘルプやガイダンスをいただければ幸いです。
Nexus 4(Android 4.3) - API 18) では、Android ネイティブ Sms クライアントで 2 つの未読 SMS (2 つの異なる送信者に属する) の通知 (デバイス ステータス バー内) がある場合、ユーザーがその通知をクリックすると、onChange(context, uri) が呼び出されます。私のアプリケーションでは、その中で読み取りSMSのIDを取得しようとしました:
String id = uri.getLastPathSegment();
上記の場合、「id」の値として「inbox」が来ました。ただし、Android ネイティブ Sms クライアントからユーザーが SMS を読み取る場合、onChange(context, uri) メソッドは呼び出されません。
Samsung Galaxy S3 (Android 4.1.2 - API 16) では、onChange(context, uri) はどちらの場合でもまったく呼び出されません (つまり、ユーザーがネイティブから SMS を読んだり、ユーザーが通知をクリックした場合 (デバイスのステータスバーで) ) Android ネイティブ Sms クライアントでの 2 つの未読 SMS (2 つの異なる送信者に属する)。
(API 16 では、新しい SMS がネイティブで受信されると、onChange(context, uri) が呼び出され、「id」の値はその SMS の一意の ID と同じです - Nexus 4(Android 4.3) でテスト済み)
注: ここで、「ネイティブから」とは、「デバイスの既定の SMS クライアントから」を意味します。