0

我正在製作一個應用程序,它記錄來自特定發件人的郵件。例如,我想從Listview中的銀行HDFC獲取所有短信。發件人的地址在我的收件箱被命名爲「AM-HDFC」。我嘗試了下面的代碼,但該應用程序崩潰,說沒有找到URI。可能的解決方案是什麼?閱讀來自android收件箱的短信誰是發件人沒有號碼

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

回答

0

試試這個:

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

使用方法如下:

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

而且不要忘記索要權限:

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

感謝您的答覆。但不幸的是,它不工作。實際上,當我打開消息應用程序的「A M-HDFC「文件夾存儲在名爲」Notifiactions「的分離文件夾中。 –

+0

嗯..我從來沒有見過消息應用程序中的子文件夾..我在我的答案中刪除了_if_語句,請重試。如果它不起作用,你可以發佈你的消息應用程序的屏幕? –

+0

仍然沒有工作和吐司ia也沒有顯示。 –