使用内容解析者去访问系统短信的内容提供者
既然我们需要访问系统短信的内容提供者,
首先我们就需要知道口令,还有uriMatcher,和数据库的表结构.
这些都是需要去系统的sms内容提供者里面找的到的(下面会截图出来)
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//添加短信
public void insert(View v){
ContentResolver resolver = getContentResolver();
//path路径不写,默认就是inbox , 可以查看源码得知。
Uri uri = Uri.parse("content://sms");
//查看数据库表结构
ContentValues values = new ContentValues();
//发信人
values.put("address", "110");
//短信内容
values.put("body","尊敬的张先生,恭喜您荣获好市民奖,希望您在以后的生活中勇于和敢于扶老奶奶过马路。");
//收到短信的时间
values.put("date",System.currentTimeMillis());
//短息的类型 1 : 收到的短信 ,2: 发出去的短信
values.put("type", 1);
resolver.insert(uri, values);
Toast.makeText(this, "添加短息成功", 0).show();
}
public void delete(View v){
ContentResolver resolver = getContentResolver();
// path路径不写,默认就是inbox , 可以查看源码得知。
Uri uri = Uri.parse("content://sms");
resolver.delete(uri, "address=?", new String[]{"110"});
Toast.makeText(this, "删除短息成功", 0).show();
}
}
注意:
1. 短信的写入操作,在4.4之后,系统不允许这么做了。原因是: 系统做了一个设置,只有系统的默认程序才可以对短信进行写入操作。其他应用可以读取短信,但是无法写入。
2. 要求收到到/setting/apps /里面手动修改默认的应用是谁。
在4.4之后,默认的内容提供者,外部程序无法访问了。要手动打开开关。
android:exported=”true”
下面是系统的代码