SmsObserver
クラスはcontent://sms/
Uri
に自分自身を登録し、発信SMSメッセージに割り当てられたスレッドIDを取得するために受信者のアドレスとメッセージボディに対してSMSテーブルの変更をチェックContentObserver
あります。このクラスは、送信側クラスが決定したときにスレッドIDを受け取るために実装する必要のあるインターフェイスを提供します。これは非同期的に発生するためです。
メッセージの送信前にこのインスタンスを起動し、スレッドIDを送信クラスのインターフェイスメソッドの実装に渡します。たとえば、Button
をクリックするとActivity
から送信している場合:
public class MainActivity extends Activity
implements SmsObserver.OnSmsSentListener {
...
public void onClick(View v) {
String address = "+1 234 567 8900";
String body = "HI Greg! ";
new SmsObserver(this, address, body).start();
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(address, null, body, null, null);
}
@Override
public void onSmsSent(int threadId) {
// Here's the thread ID.
}
}
はあなたにもREAD_SMS
許可が必要となりますのでご注意ください。
可能な代替方法は、Lollipopから開始できます。送信されたメッセージのURIは、sendTextMessage()
メソッドの第4引数として渡されたPendingIntent
からIntent
に追加されたString
として添付されます。余分なものは"uri"
というキーを持ち、Uri
として解析され、ContentResolver
のクエリで使用され、上記のようにスレッドIDを取得できます。
例えば、結果のためBroadcastReceiver
を使用している場合、sendTextMessage()
コールはそうのように次のようになります。
Intent sentIntent = ...
PendingIntent sentPi = PendingIntent.getBroadcast(context, 0, sentIntent, 0);
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(address, null, body, sentPi, null);
と受信機で余分の取得はそうのように次のようになります。
public class SmsResultReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
...
String uriString = data.getStringExtra("uri");
Uri uri = Uri.parse(uriString);
// Query as shown above in the ContentObserver
...
}
}
うん、あなたは本当にそれをすることはできません。 「電話番号が正確には得られない」というメッセージをどのように送信するかについてはわかりませんが、送信する前に 'ContentObserver'を' content:// sms''Uriに入れてメッセージがどのスレッドIDに割り当てられるか。 –
メッセージがどのスレッドIDに割り当てられるのかを確認するデモコードで答えを出すことができますか? –
コードが存在する電話番号の電話番号。 –