(内容提供者)备份短信和添加短信

1.      访问短信的数据库

2.      Android/data/data----------------------------数据库位置

3.      查看短信的内容提供者:Android源码—packages—providers—(根据应用包名找)TelephonyProvider—把文件夹导入eclipse(Import Projects)

4.      查看uri-------唯一标示;   uri: content://sms/

5.      因为要读写SD卡,所以要配置权限;------------读写SD卡权限

还有读写短信的权限

6.      保存到本地,一般用xml;


备份短信

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
	}

	/**
	 * 备份短信
	 * @param v
	 */
	public void backupSms(View v) {
		// 1. 查出所有的短信
		Uri uri = Uri.parse("content://sms/");
		
		ContentResolver resolver = getContentResolver();
		Cursor cursor = resolver.query(uri, new String[]{"_id", "address", "date", "type", "body"}, null, null, null);
		
		if(cursor != null && cursor.getCount() > 0) {
			List<SmsInfo> smsList = new ArrayList<SmsInfo>();
			SmsInfo sms;
			
			while(cursor.moveToNext()) {	// 控制游标结果集的指针向下移一位, 当到最后一位, 停止.返回false
				sms = new SmsInfo();
				sms.setId(cursor.getInt(0));	// 设置短信的id
				sms.setAddress(cursor.getString(1));	// 设置短信的号码
				sms.setDate(cursor.getLong(2));	// 设置短信的日期
				sms.setType(cursor.getInt(3));	// 设置短信的类型, 接收1还是发送2
				sms.setBody(cursor.getString(4)); // 设置短信的内容
				smsList.add(sms);
			}
			cursor.close();
			
			// 2. 序列化到本地
			writeToLocal(smsList);
		}
	}
	
	/**
	 * 序列化到本地
	 */
	private void writeToLocal(List<SmsInfo> smsList) {
		
		try {
			XmlSerializer serializer = Xml.newSerializer();	// 得到序列化对象
			// 指定输出位置
			FileOutputStream fos = new FileOutputStream("/mnt/sdcard/sms.xml");
			serializer.setOutput(fos, "utf-8");
			
			serializer.startDocument("utf-8", true);
			
			serializer.startTag(null, "smss");
			
			for (SmsInfo smsInfo : smsList) {
				serializer.startTag(null, "sms");
				serializer.attribute(null, "id", String.valueOf(smsInfo.getId()));
				
				// 写号码
				serializer.startTag(null, "address");
				serializer.text(smsInfo.getAddress());
				serializer.endTag(null, "address");

				// 写时间
				serializer.startTag(null, "date");
				serializer.text(String.valueOf(smsInfo.getDate()));
				serializer.endTag(null, "date");
				
				//写类型
				serializer.startTag(null, "type");
				serializer.text(String.valueOf(smsInfo.getType()));
				serializer.endTag(null, "type");
				
				// 写内容
				serializer.startTag(null, "body");
				serializer.text(smsInfo.getBody());
				serializer.endTag(null, "body");
				
				serializer.endTag(null, "sms");
			}
			
			serializer.endTag(null, "smss");
			
			serializer.endDocument();
			
			Toast.makeText(this, "备份成功", 0).show();
		} catch (Exception e) {
			Toast.makeText(this, "备份失败", 0).show();
			e.printStackTrace();
		}
		
	}
}

添加短信

1.      写入短信的权限;

2.      自己给自己发短信;


public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		// 停30秒钟, 想系统短信数据库中写一条短信
		new Thread(new Runnable() {
			@Override
			public void run() {
				SystemClock.sleep(10 * 1000);
				
				Uri uri = Uri.parse("content://sms/");	// 操作sms表的uri
				
				ContentValues values = new ContentValues();
				values.put("address", "95555");
				values.put("type", "1");
				values.put("body", "您的尾号为8890的账户, 收到100, 000, 000, 000.00元的转账. 活期余额为: 899, 777, 000, 111, 000.00元");
				getContentResolver().insert(uri, values);
			}
		}).start();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值