2016-03-19 2 views
0

"10001"というカスタマイズされたスレッドIDを持つSMSを作成したいと思います。どうやってやるの ?理由は、削除SMS機能を実装する必要があり、特定のSMSスレッドを削除する唯一の方法は、スレッドIDまたは電話番号経由であり、この時点で電話番号が正確には得られないため、カスタムスレッドIDを定義する必要があるからです私のSMSの送信で。AndroidでカスタマイズされたスレッドIDを使用してSmsManagerでSMSを送信するには?

SmsManager smsManager = SmsManager.getDefault(); 
    smsManager.sendTextMessage("+1 203 514 6584", null, "HI Greg! ", null, null); 

事前のおかげで助けのために:

は、私がこれまでに以下のように通常のSMS作業コードを取得することしかできました!

+0

うん、あなたは本当にそれをすることはできません。 「電話番号が正確には得られない」というメッセージをどのように送信するかについてはわかりませんが、送信する前に 'ContentObserver'を' content:// sms''Uriに入れてメッセージがどのスレッドIDに割り当てられるか。 –

+0

メッセージがどのスレッドIDに割り当てられるのかを確認するデモコードで答えを出すことができますか? –

+0

コードが存在する電話番号の電話番号。 –

答えて

2

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 
     ... 
    } 
} 
関連する問題