Android(安卓)使用内容解析者往短信数据库里插入一条数据
16lz
2022-01-23
public class MainActivity extends AppCompatActivity { private String defaultSmsPkg; private String mySmsPkg; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取默认App包名并保存 defaultSmsPkg = Telephony.Sms.getDefaultSmsPackage(this); mySmsPkg = this.getPackageName(); if (!defaultSmsPkg.equals(mySmsPkg)) { // 如果这个App不是默认的Sms App,则修改成默认的SMS APP // 因为从Android 4.4开始,只有默认的SMS APP才能对SMS数据库进行处理 Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT); intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, mySmsPkg); startActivity(intent); } } // 点击按钮 往短信数据库里面插入一条数据 public void click1(View v) { // 由于短信数据库已经通过内容提供者暴露出来了 所以我们可以直接通过内容解析者操作数据库 Uri uri = Uri.parse("content://sms/inbox"); ContentValues values = new ContentValues(); values.put("address", "110"); values.put("body", "王先生,请您马上来一趟,否则后果自负"); values.put("date", System.currentTimeMillis()); getContentResolver().insert(uri, values); Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT); intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, defaultSmsPkg); startActivity(intent); } } 然后按照清单文件里的新建对应的类,类里面可以什么都不用写
以上为5.0以上系统写短信方式。
但是在同一个click里调用两次更改默认短信方式(改为app再改回message)会出一些无响应的问题,待解决。
Android4.4之前,可以直接申请权限来解决读写短信问题
在Android4.4之后,但是在4.4以上以及5.1由于系统更新了 SMS 的部分API,加强了权限控制,因此现在只有default SMS app才能对短信数据库有写权限,但是用户可以把第三方应用设置为default SMS app。也就是说非default SMS app也能读写短信,只不过是不能写入短信数据库中,这也就直接导致在4.4以上短信无法恢复。
4.4-5.0写短信方式看我上一篇博文。
更多相关文章
- Android(安卓)手势识别中的两个默认实现SimpleOnScaleGestureLis
- 关于Android(安卓)中sqlite 报can not open database错误
- Android开发者面试如何系统复习?帮你突破瓶颈
- Android(安卓)关于 如何使用外界导入的数据库文件
- WCF 实例 —— Android(安卓)短信助手 (WCF + Android) (1)
- Android修改Eclipse 中的Default debug keystore路径,以及修改and
- 修改Android(安卓)actionbar 溢出菜单按钮(OverflowButton)默认图
- android 数据库操作 (非ContentProvider)
- Android(安卓)开发者从0到1发布一个微信小程序的采坑过程——使