-1

Ich habe eine SMS eingehende Telefonnummer 123456. Ich möchte eine Absicht verwenden, um die SMS-Nachricht der eingehenden Telefonnummer im Dienst zu öffnen. Ich habe versucht, zwei Möglichkeiten, aber sie geben nicht zufrieden ErgebnisseKann SMS im Lesemodus Android 5.0 nicht lesen?

Erster Weg:

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

Die Art und Weise nur öffnet die SMS-Liste. Wir müssen uns das eingehende Telefon in der Liste ansehen und benötigen einen weiteren Schritt, um den Inhalt des eingehenden SMS-Telefons zu öffnen. Ich möchte den Schritt ignorieren. Es bedeutet, dass es direkt den Inhalt der eingehenden SMS-Telefonnummer gehen wird.

Zweiter Weg:

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

diese Weise die Einzelheiten der eingehenden SMS-Telefonnummer lesen kann, aber es ist Modus sendet. Ich möchte SMS im Lesemodus lesen.

Wie kann ich es in Android L tun? Vielen Dank an alle

Die Frage bezieht sich auf How to open SMS intent to read (not send) message?. Der andere stellt den Quellcode für zwei Fälle bereit: der eine ist der Lesemodus (erster) mit einem weiteren Schritt, der andere ist der Sendemodus.

Update: Das ist viel, was ich die SMS eingehende Telefonnummer

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

helfen Deine Frage ist mir nicht klar. Möchten Sie die Nummer und den Nachrichtentext abrufen und nach einer bestimmten Nummer filtern? –

+0

Ich habe bereits Nummer und Körper von BroadcastReceiver. Ich möchte nur die SMS der eingehenden Telefonnummer im Lesemodus öffnen. – Jame

+1

Mögliches Duplikat von [So öffnen Sie die SMS-Absicht, Nachrichten zu lesen (nicht zu senden)?] (Http://stackoverflow.com/questions/39678042/how-to-open-sms-intent-to-read-not-send- Nachricht) –

Antwort

1

bekommen Wenn Sie die Nachricht in der Standard-Anwendung öffnen mögen, dann werden Sie die Thread-ID der Nachricht mehr brauchen Sie erhalten hat. Was Sie tun können, ist die Nachricht db abfragen und die Thread-ID mit Ihrer Logik erhalten und dann öffnen die unten Absicht mit -

Intent intent = new Intent(Intent.ACTION_VIEW); 

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

Was ist 'sms'? Es war falsch in Android – Jame

+0

SMS ist ein benutzerdefiniertes Objekt, das die Thread-ID speichert. In Ihrem Fall müssen Sie die Datenbank abfragen und die Thread-ID der letzten Nachricht abrufen. Sie müssen dafür Ihre Logik entwickeln. – Gautam

+0

Ich habe Thread-ID von http://stackoverflow.com/questions/30260877/restore-sms-create-thread-if-not-exists, jedoch ist das Ergebnis ähnlich meiner zweiten Möglichkeit. Es ging in den sendenden Modus, anstelle des Lesemodus – Jame

0

Dies ist meine Antwort mit Unterstützung von @Gautam. Erstens haben wir thread_id einer SMS erhalten, indem Sie den Code

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

Von thread_id verwenden, wir SMS-Inhalte im Lesemodus anzeigen kann wie folgt dar:

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

Hoffe, dass es jemand

Verwandte Themen