android获取发件人的信息,阅读特定发件人的所有短信

试试这种方式:

StringBuilder smsBuilder = new StringBuilder(); final String SMS_URI_INBOX = "content://sms/inbox"; final String SMS_URI_ALL = "content://sms/"; try { Uri uri = Uri.parse(SMS_URI_INBOX); String[] projection = new String[] { "_id", "address", "person", "body", "date", "type" }; Cursor cur = getContentResolver().query(uri, projection, "address='123456789'", null, "date desc"); if (cur.moveToFirst()) { int index_Address = cur.getColumnIndex("address"); int index_Person = cur.getColumnIndex("person"); int index_Body = cur.getColumnIndex("body"); int index_Date = cur.getColumnIndex("date"); int index_Type = cur.getColumnIndex("type"); do { String strAddress = cur.getString(index_Address); int intPerson = cur.getInt(index_Person); String strbody = cur.getString(index_Body); long longDate = cur.getLong(index_Date); int int_Type = cur.getInt(index_Type); smsBuilder.append("[ "); smsBuilder.append(strAddress + ", "); smsBuilder.append(intPerson + ", "); smsBuilder.append(strbody + ", "); smsBuilder.append(longDate + ", "); smsBuilder.append(int_Type); smsBuilder.append(" ]\n\n"); } while (cur.moveToNext()); if (!cur.isClosed()) { cur.close(); cur = null; } } else { smsBuilder.append("no result!"); } // end if } } catch (SQLiteException ex) { Log.d("SQLiteException", ex.getMessage()); }

AndroidManifest.xml中:

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); inbox = (Button) findViewById(R.id.inbox); list = (ListView) findViewById(R.id.list); arlist = new ArrayList(); inbox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Uri inboxUri = Uri.parse("content://sms/inbox"); String[] reqCols = {"_id", "body", "address"}; ContentResolver cr = getContentResolver(); Cursor cursor = cr.query(inboxUri, reqCols, "address='+919456'", null, null); adapter = new SimpleCursorAdapter(getApplicationContext(), R.layout.msg_content_layout, cursor, new String[]{"body", "address"}, new int[]{R.id.txt1, R.id.txt2}); list.setAdapter(adapter); } }); }

这里我添加了数字+919456作为地址字段的值。

除此之外,您还需要为manifest清单添加READ_SMS权限:

试试这个,它是从收件箱中阅读邮件的简便方法。

public class ReadMsg extends AppCompatActivity { ListView listView; private static final int PERMISSION_REQUEST_READ_CONTACTS = 100; ArrayList smsList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_read_msg); listView = (ListView)findViewById(R.id.idList); int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS); if (permissionCheck == PackageManager.PERMISSION_GRANTED){ showContacts(); }else{ ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_SMS},PERMISSION_REQUEST_READ_CONTACTS); } } private void showContacts() { Uri inboxURI = Uri.parse("content://sms/inbox"); smsList = new ArrayList(); ContentResolver cr = getContentResolver(); Cursor c = cr.query(inboxURI,null,null,null,null); while (c.moveToNext()){ String Number = c.getString(c.getColumnIndexOrThrow("address")).toString(); String Body= c.getString(c.getColumnIndexOrThrow("body")).toString(); smsList.add("Number: "+ Number + "\n" + "Body: "+ Body ); } c.close(); ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, smsList); listView.setAdapter(adapter); }

}

将此权限添加到清单中。

public class SmsController extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { SmsMessage msgs[] = null; Bundle bundle = intent.getExtras(); try { Object pdus[] = (Object[]) bundle.get("pdus"); msgs = new SmsMessage[pdus.length]; for (int n = 0; n < pdus.length; n++) { byte[] byteData = (byte[]) pdus[n]; msgs[n] = SmsMessage.createFromPdu(byteData); } } catch (Exception e) { } for (int i = 0; i < msgs.length; i++) { String message = msgs[i].getDisplayMessageBody(); if (message != null && message.length() > 0) { String from = msgs[i].getOriginatingAddress(); if(FROM.contains("TM-MYAMEX")){ String body = message ; Date datetime = new Date() ; } } } } } }

我不确定“TM-MYAMEX”是什么意思,但这里是获取所有SMS的代码。

Date = new Date()因为它在BroadcastReceiver然后你得到消息当前时间。

希望这有帮助。

你可以用几行代码完成这个

String[] phoneNumber = new String[] { "+923329593103" }; Cursor cursor1 = getContentResolver().query(Uri.parse("content://sms/inbox"), new String[] { "_id", "thread_id", "address", "person", "date","body", "type" }, "address=?", phoneNumber, null); StringBuffer msgData = new StringBuffer(); if (cursor1.moveToFirst()) { do { for(int idx=0;idx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值