android短信備份與還原

獲取手機內短信內容

public List<SmsInfo> getSmsInfosFromPhone(){
		List<SmsInfo> infos=new ArrayList<SmsInfo>();
		Uri uri=Uri.parse("content://sms");
		
		Cursor c=context.getContentResolver().query(uri, 
				new String[]{"address","date","type","body"}, null, null, null);
		while(c.moveToNext()){
			String address=c.getString(c.getColumnIndex("address"));
			String date=c.getString(c.getColumnIndex("date"));
			String type=c.getString(c.getColumnIndex("type"));
			String body=c.getString(c.getColumnIndex("body"));
			
			SmsInfo info=new SmsInfo(address, date, type, body);
			infos.add(info);
		}
		c.close();
		return infos;
	}


把短信內容寫入到xml文件中

public void backupSms(List<SmsInfo> smss) throws Exception{
		XmlSerializer serializer=Xml.newSerializer();
		File file=new File(Environment.getExternalStorageDirectory()+"/HuiGui/backup","smsbackup.xml");
		if(!file.exists()){
			file.createNewFile();
		}
		
		OutputStream os=new FileOutputStream(file);
		serializer.setOutput(os, "UTF-8");
		
		serializer.startDocument("UTF-8", true);
		serializer.startTag(null, "smsinfos");
		
		for(SmsInfo info:smss){
			serializer.startTag(null, "smsinfo");
			
			serializer.startTag(null, "address");
			serializer.text(info.getAddress());
			serializer.endTag(null, "address");
			
			serializer.startTag(null, "date");
			serializer.text(info.getDate());
			serializer.endTag(null, "date");
			
			serializer.startTag(null, "type");
			serializer.text(info.getType());
			serializer.endTag(null, "type");
			
			serializer.startTag(null, "body");
			serializer.text(info.getBody());
			serializer.endTag(null, "body");
			
			serializer.endTag(null, "smsinfo");
		}
		serializer.endTag(null, "smsinfos");
		serializer.endDocument();
		os.close();
	}

從文件還原短信

public List<SmsInfo> getSmsInfosFromSD() throws Exception{
		List<SmsInfo> infos=null;
		SmsInfo smsinfo=null;
		XmlPullParser parser=Xml.newPullParser();
		File file=new File(Environment.getExternalStorageDirectory()+"/HuiGui/backup","smsbackup.xml");
		InputStream fis=new FileInputStream(file);
		parser.setInput(fis, "UTF-8");
		int eventType=parser.getEventType();
		while(eventType!=XmlPullParser.END_DOCUMENT){
			switch(eventType){
			case XmlPullParser.START_TAG:
				if("smsinfos".equals(parser.getName())){
					infos=new ArrayList<SmsInfo>();
				}else if("smsinfo".equals(parser.getName())){
					smsinfo=new SmsInfo();
				}else if("address".equals(parser.getName())){
					String address=parser.nextText();
					smsinfo.setAddress(address);
				}else if("date".equals(parser.getName())){
					String date=parser.nextText();
					smsinfo.setDate(date);
				}else if("type".equals(parser.getName())){
					String type=parser.nextText();
					smsinfo.setType(type);
				}else if("body".equals(parser.getName())){
					String body=parser.nextText();
					smsinfo.setBody(body);
				}
				
				
				
				break;
			case XmlPullParser.END_TAG:
				if("smsinfo".equals(parser.getName())){
					infos.add(smsinfo);
					smsinfo=null;
				}
				break;
			}
			eventType=parser.next();
		}
		
		return infos;
	}


還原短信

private void restoreSms(){	
		new Thread(){
			public void run() {
				try {
					Uri uri=Uri.parse("content://sms");
					getContentResolver().delete(uri, null, null);
					
					mpd.setTitle("正在還原短信...");
					List<SmsInfo> smss=smsOperation.getSmsInfosFromSD();
					mpd.setMax(smss.size());
					for(SmsInfo sms:smss){
						ContentValues values=new ContentValues();
						values.put("address", sms.getAddress());
						values.put("date", sms.getDate());
						values.put("type", sms.getType());
						values.put("body", sms.getBody());
						getContentResolver().insert(uri, values);
						SystemClock.sleep(2000);
						mpd.incrementProgressBy(1);
					}
					mpd.dismiss();
					Looper.prepare();
					Toast.makeText(getApplicationContext(), "短信還原成功!", Toast.LENGTH_SHORT).show();
					Looper.loop();
					
					
				} catch (Exception e) {
					e.printStackTrace();
					mpd.dismiss();
					Looper.prepare();
					Toast.makeText(getApplicationContext(), "短信還原未成功。。。", Toast.LENGTH_SHORT).show();
					Looper.loop();
				}
				
			};
		}.start();
	}



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章