【Android】使用内容提供者读取手机短信

1.布局文件




2.MainActivity.java:

public class MainActivity extends Activity {private ListView mListView;private SimpleAdapter sa;private List> data;public static final int REQ_CODE_CONTACT = 1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate( savedInstanceState );setContentView( R.layout.activity_main );initView();}private void initView() {mListView = findViewById( R.id.listView );data = new ArrayList>();//配置适配置器Sasa = new SimpleAdapter( this, data, android.R.layout.simple_list_item_2,new String[]{"names", "message"}, new int[]{android.R.id.text1,android.R.id.text2} );mListView.setAdapter( sa );}/*** 点击读取短信* @param view*/public void readSMS(View view) {checkSMSPermission();}/*** 检查申请短信权限*/private void checkSMSPermission() {if (ContextCompat.checkSelfPermission( this, Manifest.permission.READ_SMS )!= PackageManager.PERMISSION_GRANTED) {//未获取到读取短信权限,向系统申请权限ActivityCompat.requestPermissions( this,new String[]{Manifest.permission.READ_SMS}, REQ_CODE_CONTACT );} else {query();}}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {//判断用户是否,同意获取短信授权if (requestCode == REQ_CODE_CONTACT && grantResults.length > 0&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {//获取到读取短信权限query();} else {Toast.makeText( this, "未获取到短信权限", Toast.LENGTH_SHORT ).show();}}private void query() {//读取所有短信Uri uri = Uri.parse( "content://sms/" );   //通过content://sms/这个URI访问SMS数据库ContentResolver resolver = getContentResolver();Cursor cursor = resolver.query( uri, new String[]{"_id", "address", "body", "date", "type"}, null, null, null );if (cursor != null && cursor.getCount() > 0) {int _id;String address;String body;String date;int type;while (cursor.moveToNext()) {Map map = new HashMap();_id = cursor.getInt( 0 );address = cursor.getString( 1 );body = cursor.getString( 2 );date = cursor.getString( 3 );type = cursor.getInt( 4 );map.put( "names", body );Log.i( "test", "_id=" + _id + " address=" + address + " body=" + body + " date=" + date + " type=" + type );data.add( map );//通知适配器发生改变sa.notifyDataSetChanged();}}}
}

3.在清单文件中添加读取短信的权限:


4.总结:

1.Android存放短信的数据库为mmssms.db在/data/data/com.android.providers.telephony目录下,该目录需要手机root之后才能看。
其中sms表—存放了手机的所有短信,其中的字段如下:

  • _id:短信序号
  • thread_id:对话的序号
  • address:发件人地址,手机号
  • person:发件人,返回一个数字就是联系人列表里的序号,陌生人为null
  • date:日期,long类型
  • protocol:协议 0 SMS_RPOTO,1 MMS_PROTO
  • read:是否阅读 0 未读,1 已读
  • status:状态 -1 接收,0 complete,64 pending,128 failed
  • type:类型 1 接收到的,2 已发出
  • body:短信消息内容
  • service_center:短信服务中心号码编号

2.Android内容提供者:
内容提供者是应用程序之间共享数据的接口。应用程序创建的数据库,默认情况下是私有的,别的应用程序访问不到数据,如果想要把数据对外提供,就要使用内容提供者。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部