0

特定の送信者からのメッセージを記録するアプリを作成しています。たとえば、リストビューの銀行のHDFCからすべてのSMSを取得したいとします。私の受信トレイは"AM-HDFC"となります。以下のコードを試しましたが、URIが見つからないとアプリがクラッシュしました。可能な解決策は何ですか?Androidの受信トレイにあるSMSには番号がありません

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

これを試してみてください:

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

そして、許可を求めることを忘れないでください:返信用

<uses-permission android:name="android.permission.READ_SMS" /> 
+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(); } } 

はこのようにそれを使用してください。しかし、残念ながらそれは動作していません。実際に私がメッセージングアプリケーションを開くと、 "A M-HDFC "フォルダは、" Notifiactions "というseprateフォルダに保存されます。 –

+0

Hmm ..私はメッセージングアプリでサブフォルダを見たことがありません。私の答えで_if_文を削除しました。もう一度やり直してください。それが動作しない場合は、メッセージングアプリの画面を投稿できますか? –

+0

まだ動作しておらず、トアが表示されません。 –

関連する問題