Android 使用内容解析者往短信数据库里插入一条数据
2017-04-29 12:39
621 查看
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);
}
}
然后按照清单文件里的新建对应的类,类里面可以什么都不用写
<receiver android:name=".SmsReceiver" android:permission="android.permission.BROADCAST_SMS"> <intent-filter> <action android:name="android.provider.Telephony.SMS_DELIVER" /> </intent-filter> </receiver> <receiver android:name=".MmsReceiver" android:enabled="true" android:exported="true" android:permission="android.permission.BROADCAST_WAP_PUSH"> <intent-filter> <action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" /> <data android:mimeType="application/vnd.wap.mms-message" /> </intent-filter> </receiver> <activity android:name=".SmsActivity"> <intent-filter> <action android:name="android.intent.action.SEND" /> <action android:name="android.intent.action.SENDTO" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="sms" /> <data android:scheme="smsto" /> <data android:scheme="mms" /> <data android:scheme="mmsto" /> </intent-filter> </activity> <service android:name=".SmsService" android:enabled="true" android:exported="true" android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE"> <intent-filter> <action android:name="android.intent.action.RESPOND_VIA_MESSAGE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="sms" /> <data android:scheme="smsto" /> <data android:scheme="mms" /> <data android:scheme="mmsto" /> </intent-filter> </service>
以上为5.0以上系统写短信方式。
但是在同一个click里调用两次更改默认短信方式(改为app再改回message)会出一些无响应的问题,待解决。
Android4.4之前,可以直接申请权限来解决读写短信问题
<uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.WRITE_SMS" />
在Android4.4之后,但是在4.4以上以及5.1由于系统更新了 SMS 的部分API,加强了权限控制,因此现在只有default SMS app才能对短信数据库有写权限,但是用户可以把第三方应用设置为default SMS app。也就是说非default SMS app也能读写短信,只不过是不能写入短信数据库中,这也就直接导致在4.4以上短信无法恢复。
4.4-5.0写短信方式看我上一篇博文。
相关文章推荐
- 无废话Android之listview入门,自定义的数据适配器、采用layoutInflater打气筒创建一个view对象、常用数据适配器ArrayAdapter、SimpleAdapter、使用ContentProvider(内容提供者)共享数据、短信的备份、插入一条记录到系统短信应用(3)
- Android 使用内容解析者往联系人数据库中插入数据
- 使用SQLiteOpenHelper插入数据到数据库并读取数据库中的内容
- 【黑马Android】(04)数据库的创建和sql语句增删改查/LinearLayout展示列表数据/ListView的使用和BaseAdater/内容提供者创建
- 使用SQLiteHelper创建数据库并插入数据 分类: H1_ANDROID 2013-11-05 22:44 1398人阅读 评论(0) 收藏
- 关于Android sqlite3数据库创建使用内容提供者contentProvider及解析者ContentResolver,观察者ContentResolver案例
- android中插入一条SMS短信内容(可用于恢复SMS短信操作)
- 【黑马Android】(04)数据库的创建和sql语句增删改查/LinearLayout展示列表数据/ListView的使用和BaseAdater/内容提供者创建
- [android]_[初级][插入短信数据到短信数据库]
- 【黑马Android】(05)短信/查询和添加/内容观察者使用/子线程网络图片查看器和Handler消息处理器/html查看器/使用HttpURLConnection采用Post方式请求数据/开源项目
- Android数据库中查找一条数据使用的方法 query详解
- 数据库中插入数据错误 android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
- 在oracle中插入一条数据,id自动增长,插入之后怎么得到这个id(sequence的使用)
- Android中Spinner下拉列表(使用自定义Adapter实现,显示数据取自联系人数据库)
- 使用SqlBulkCopy将DataTable中的数据批量插入数据库中
- 使用rs.insertRow()将JTable中的数据插入到数据库sqlserver
- Android 内容提供器---内容提供器基础(插入、更新和删除数据)
- Android使用ContentObserver监听数据库变化 接受指定号码的短信,并且不让系统截取到通知用户
- C#窗体操作数据库时使用按钮动态衔接上下一条的数据
- XCode使用记录—使用XCode自动向数据库插入测试数据