0

Ich mache eine App, die die Nachrichten von einem bestimmten Absender aufzeichnet.Für zB möchte ich alle SMS von der Bank HDFC in einer ListView bekommen.Die Adresse des Absenders in Mein Posteingang heißt "AM-HDFC". Ich habe versucht, den folgenden Code, aber die App stürzt ab, sagen, dass URI nicht gefunden wird. Was wird die mögliche Lösung sein?Lesen von SMS aus Android-Posteingang Wer ist der Absender hat keine Nummer

public class MsgReader extends AppCompatActivity { 
    Cursor c; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_msg_reader); 
     List<Sms> smslist=getAllSms("inbox"); 
     RecyclerView rView = (RecyclerView) findViewById(R.id.list); 
     rView.setLayoutManager(new LinearLayoutManager(this)); 
     rView.setHasFixedSize(true); 
     MsgAdapter rcAdapter = new MsgAdapter(smslist); 
     rView.setAdapter(rcAdapter); 

    } 
    public List<Sms> getAllSms(String folderName) { 

     List<Sms> lstSms = new ArrayList<Sms>(); 
     Sms objSms = new Sms(); 
     Uri message = Uri.parse("content://sms/"); 
     ContentResolver cr = this.getContentResolver(); 

     c= cr.query(Uri.parse("content://mms-sms/AM-HDFC"), null, null, null, null); 
     this.startManagingCursor(c); 
     int totalSMS = c.getCount(); 

     if (c.moveToFirst()) { 
      for (int i = 0; i < totalSMS; i++) { 

       objSms = new Sms(); 
       objSms.setId(c.getString(c.getColumnIndexOrThrow("_id"))); 
       objSms.setAddress(c.getString(c.getColumnIndexOrThrow("address"))); 
       objSms.setMsg(c.getString(c.getColumnIndexOrThrow("body"))); 
       objSms.setReadState(c.getString(c.getColumnIndex("read"))); 
       objSms.setTime(c.getString(c.getColumnIndexOrThrow("date"))); 

       lstSms.add(objSms); 
       c.moveToNext(); 
      } 
     } 
     else { 
     throw new RuntimeException("You have no SMS in " + folderName); 
     } 
     c.close(); 

     return lstSms; 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     if (c != null) { 
      c.close(); 
     } 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     if (c != null) { 
      c.close(); 
     } 
    } 
} 

Antwort

0

Try this:

public void getSmsInbox(Context context, String address) { 
    String selection = Telephony.Sms.ADDRESS+"='"+address+"'"; 

    ContentResolver cr = context.getContentResolver(); 
    Cursor c = cr.query(Telephony.Sms.CONTENT_URI, null, selection, null, null); 
    if (c != null) { 
     if (c.moveToFirst()) { 
      for (int j = 0; j < c.getCount() ; j++) { 
       String smsDate = c.getString(c.getColumnIndexOrThrow(Telephony.Sms.DATE)); 
       Date dateFormat = new Date(Long.valueOf(smsDate)); 
       String body = c.getString(c.getColumnIndexOrThrow(Telephony.Sms.BODY)); 
       Log.d(TAG, address+", "+dateFormat.toString()+" : "+body); 
       c.moveToNext(); 
      } 
     } 
     c.close(); 
    } else { 
     Toast.makeText(this, "No message to show!", Toast.LENGTH_SHORT).show(); 
    } 
} 

es wie folgt verwendet:

getSmsInbox(MainActivity.this, "AM-HDFC"); 

Und vergessen Sie nicht die Erlaubnis zu fragen:

<uses-permission android:name="android.permission.READ_SMS" /> 
+0

Danke für Ihre Antwort. Aber leider funktioniert es nicht. Wenn ich die Messaging-App öffne, ist der "A M-HDFC "Ordner wird in einem separaten Ordner namens" Notifications "gespeichert. –

+0

Hmm .. Ich habe nie Unterordner in Messaging-Apps gesehen .. Ich habe die _if_ Anweisung in meiner Antwort entfernt, versuchen Sie es erneut. Wenn es nicht funktioniert, können Sie einen Bildschirm Ihrer Messaging-App posten? –

+0

Immer noch nicht funktioniert und Toast ia auch nicht angezeigt. –

Verwandte Themen