使用ContentProvider查看系统短信

使用ContentProvider查看系统短信,首先要知道系统短信的数据文件在哪,在Android Studio中单击Device File Explorer,在目录中选择data/user_de/0/
com.android.roviders.telephony/databases目录下的mmssms.db文件中,与短信有关的是sms表,_id表示短信主键,address表示发送接收短信的手机号码,body表示短信内容

布局文件



创建系统信息类SmsInfo

package com.fangkuai.readmsg;

public class SmsInfo {
private int _id; //短信主键
private String address; //发送地址
private String body; //短信内容

public SmsInfo(int _id, String address, String body) {this._id = _id;this.address = address;this.body = body;
}public int get_id() {return _id;
}public void set_id(int _id) {this._id = _id;
}public String getAddress() {return address;
}public void setAddress(String address) {this.address = address;
}public String getBody() {return body;
}public void setBody(String body) {this.body = body;
}

}

界面交互代码

package com.fangkuai.readmsg;

import android.Manifest;
import android.content.ContentResolver;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private TextView sms;
private TextView des;
private Button btnSearch;
private List list;
private String text="";@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView() {sms = (TextView) findViewById(R.id.sms);des = (TextView) findViewById(R.id.des);btnSearch = (Button) findViewById(R.id.btnSearch);list=new ArrayList();btnSearch.setOnClickListener(this);
}@Override
public void onClick(View v) {switch (v.getId()) {case R.id.btnSearch:ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.READ_SMS},1);break;}
}@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);if (requestCode==1){for (int i = 0; i < permissions.length; i++) {if (grantResults[i]== PackageManager.PERMISSION_GRANTED){getSms();}else {Toast.makeText(MainActivity.this,permissions[i]+"权限申请失败",Toast.LENGTH_SHORT).show();}}}}private void getSms() {Uri uri=Uri.parse("content://sms");                 //获取系统信息的uriContentResolver resolver=getContentResolver();Cursor cursor=resolver.query(uri,new String[]{"_id","address","body"},null,null,null);if (cursor!=null&&cursor.getCount()>0){sms.setVisibility(View.VISIBLE);if (list!=null) list.clear();           //清除集合中的数据text="";                                //清空text的原有数据while (cursor.moveToNext()) {int _id = cursor.getInt(0);String address = cursor.getString(1);String body = cursor.getString(2);SmsInfo smsInfo=new SmsInfo(_id,address,body);list.add(smsInfo);}cursor.close();}for (int i = 0; i 

}

最后在AndroidMainfest.xml中添加读取系统短信的权限

当点击“查看短信”按钮时,弹出权限请求对话框提示,点击“ALLOW”显示界面效果

在这里插入图片描述
在这里插入图片描述


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

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部