-1

SMS 수신 전화 번호는 123456입니다. 인 텐트를 사용하여 서비스에서 들어오는 전화 번호의 SMS 메시지를 열고 싶습니다. 나는 두 가지 방법을 시도하지만, 그들은 만족 결과를읽기 모드에서 SMS를 읽을 수 없습니까? Android 5.0?

첫 번째 방법 제공 :

 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 전화의 내용을 열려면 더 많은 단계가 필요합니다. 나는 그 단계를 무시하고 싶다. 즉, 들어오는 SMS 전화 번호의 내용을 직접 이동한다는 의미입니다.

두 번째 방법 :

 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에서 할 수 있습니까? 감사합니다 모두

질문은 How to open SMS intent to read (not send) message?와 관련됩니다. 다른 하나는 두 가지 경우에 대한 소스 코드를 제공합니다. 하나는 단계를 더 필요로하는 읽기 모드 (첫 번째)이고 다른 하나는 단계를 보내는 것입니다.

업데이트 :이 방법 당신은 당신이받은 메시지의 스레드 ID를 필요로 할 기본 응용 프로그램에서 메시지를 열려면 내가 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(); 
        } 
     } 
    } 

} 
+0

도움을 희망 : 첫째, 우리는 다음과 같이 우리가 읽기 모드에서 SMS의 내용을 표시 할 수 있습니다, 코드 thread_id에서

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; } 

를 사용하여 SMS의 thread_id를 얻을 수 있습니다 귀하의 질문에 분명하지 않습니다. 번호와 메시지 본문을 가져 와서 특정 번호로 필터링하고 싶습니까? –

+0

나는 이미 BroadcastReceiver의 수와 본문을 가지고 있습니다. 수신 전화 번호의 SMS를 읽기 모드로 열려고합니다. – Jame

+1

[SMS 의도 (읽지 않음) 메시지를 여는 방법?] (http://stackoverflow.com/questions/39678042/how-to-open-sms-intent-to-read-not-send- 메시지) –

답변

1

을 얻을 것입니다.

Intent intent = new Intent(Intent.ACTION_VIEW); 

intent.setData(Uri.parse("content://mms-sms/conversations/" + sms.getThreadId())); 
mContext.startActivity(intent); 
+0

'SMS '란 무엇입니까? Android에서 잘못되었습니다. – Jame

+0

sms는 스레드 ID를 저장하는 맞춤 개체입니다. 귀하의 경우에는 DB를 쿼리하고 최신 메시지의 스레드 ID를 가져야합니다. 이를위한 논리를 개발해야합니다. – Gautam

+0

http://stackoverflow.com/questions/30260877/restore-sms-create-thread-if-not-exists에서 스레드 ID를 얻었지만 그 결과는 제 두 번째 방법과 비슷합니다. 그것은 그 스레드 ID가 존재하지 않으면 모드 – Jame

0

이 @Gautam의 지원을 내 대답은 - 당신이 할 수있는 아래의 의도를 사용하여 엽니 메시지 DB를 조회하고 논리를 사용하여 스레드 ID를 얻을 수 있습니다.

 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); 

이 누군가에게