-1

SMS 着信電話番号を持ってい123456ます。インテントを使用して、着信電話番号の SMS メッセージをサービスで開きたいと考えています。2つの方法を試しましたが、満足のいく結果が得られませんでした

最初の方法:

        Intent smsIntent = new Intent(Intent.ACTION_MAIN);
        smsIntent.addCategory(Intent.CATEGORY_DEFAULT);
        smsIntent.setType("vnd.android-dir/mms-sms");
        smsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(smsIntent);

方法は、SMS リストを開くだけです。リスト内の着信電話を確認する必要があり、着信 SMS 電話のコンテンツを開くにはもう 1 つの手順が必要です。ステップを無視したい。これは、着信 SMS 電話番号のコンテンツに直接移動することを意味します。

2 番目の方法:

        Intent smsIntent = new Intent(Intent.ACTION_VIEW);
        smsIntent.setType("vnd.android-dir/mms-sms");
        smsIntent.putExtra("address", SMSphoneNumber);
        smsIntent.putExtra("sms_body",SMSBody);
        smsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(smsIntent);

この方法では、着信 SMS 電話番号の詳細を読み取ることができますが、送信モードになっています。SMSを閲覧モードで読みたい。

Android Lでどうすればできますか?ありがとう

質問は、メッセージを読む (送信しない) 目的で SMS を開く方法に関連していますか? . 別のものは、2 つのケースのソース コードを提供しています。

更新:これは、SMSの着信電話番号を取得する方法です

public class SMSReceiver extends BroadcastReceiver {
    private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(SMS_RECEIVED)) {
                    Bundle extras = intent.getExtras();
                    SmsMessage[] smgs = null;
                    String infoSender = "";
                    String infoSMS = "";

                    if (extras != null) {
                        // Retrieve the sms message received
                        Object[] pdus = (Object[]) extras.get("pdus");
                        smgs = new SmsMessage[pdus.length];

                        for (int i = 0; i < smgs.length; i++) {
                            smgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
                            infoSender += smgs[i].getOriginatingAddress();
                            if (smgs[i].getMessageBody()!=null)
                                infoSMS += smgs[i].getMessageBody().toString();
                            else
                                infoSMS += ".";
                        }
                        Toast.makeText(context, "Phone in SMSReceiver is -" + infoSender + "Body is" + infoSMS, Toast.LENGTH_SHORT).show();
                    }
        }
    } 

}
4

2 に答える 2

1

デフォルトのアプリケーションでメッセージを開く場合は、受信したメッセージのスレッド ID が必要になります。あなたができることは、メッセージデータベースにクエリを実行し、ロジックを使用してスレッドIDを取得し、以下のインテントを使用して開くことです-

Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setData(Uri.parse("content://mms-sms/conversations/" + sms.getThreadId()));
mContext.startActivity(intent);
于 2016-09-26T12:05:41.593 に答える
0

これは@Gautamのサポートによる私の答えです。まず、thread_idコードを使用して SMSを取得する必要があります。

 public static long getThreadId(Context context, String phoneNumber) {
        ContentResolver contentResolver = context.getContentResolver();
        Uri uri = Uri.parse("content://sms/");
        Cursor cursor = contentResolver.query(uri, null, "thread_id IS NOT NULL) GROUP BY (thread_id AND address=?", new String[]{phoneNumber}, "date DESC");
        long threadId=0;
        while (cursor.moveToNext()) {
            threadId = cursor.getLong(cursor.getColumnIndex("thread_id"));
        }
        cursor.close();
        return threadId;
    }

からthread_id、次のように SMS コンテンツを読み取りモードで表示できます。

        long thread_id=  getThreadId(getApplicationContext(), SMSphoneNumber);
        Log.d(TAG,"==========THREAD ID"+String.valueOf(thread_id)+"=========");
        smsIntent.setData(Uri.parse("content://mms-sms/conversations/" + thread_id));
        smsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        getApplicationContext().startActivity(smsIntent);

それが誰かを助けることを願っています

于 2016-09-26T13:04:01.427 に答える