Android黑科技之读取用户短信+修改系统短信数据库

2019-12-10 19:36:19丽君
易采站长站为您分析Android黑科技之读取用户短信+修改系统短信数据库 的相关资料,需要的朋友可以参考下  

安卓系统比起ios系统最大的缺点,相信大家都知道,就是系统安全问题。这篇博客就秀一波“黑科技”。

读取用户短信

Android应用能读取用户手机上的短信,相信已经不是什么新鲜事,比如我们收到的短信验证码,一些app马上就能自动获取并填上验证码,省去我们手动填写验证码。原理就是通过Android的ContentProvider组件间接访问系统的短信数据库,获取所有短信内容。下面来演示一下。

        布局很简单,如下:

 Android黑科技之读取用户短信+修改系统短信数据库

代码如下:

public class MainActivity extends Activity {
  List<Message> smsList;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    smsList = new ArrayList<Message>();
  }
  public void click(View v){
    //访问内容提供者获取短信
    ContentResolver cr = getContentResolver();
    //            短信内容提供者的主机名
    Cursor cursor = cr.query(Uri.parse("content://sms"), new String[]{"address", "date", "body", "type"}, 
        null, null, null);
    while(cursor.moveToNext()){
      String address = cursor.getString(0);
      long date = cursor.getLong(1);
      String body = cursor.getString(2);
      String type = cursor.getString(3);
      Message sms = new Message(body, type, address, date);
      smsList.add(sms);
      Log.e("TAG", sms.toString());
    }
  }
  public void click2(View v){
    XmlSerializer xs = Xml.newSerializer();
    File file = new File("sdcard/sms.xml");
    FileOutputStream fos;
    try {
      fos = new FileOutputStream(file);
      xs.setOutput(fos, "utf-8");
      xs.startDocument("utf-8", true);
      xs.startTag(null, "message");
      for (Message sms : smsList) {
        xs.startTag(null, "sms");
        xs.startTag(null, "body");
        xs.text(sms.getBody());
        xs.endTag(null, "body");
        xs.startTag(null, "date");
        xs.text(sms.getDate() + "");
        xs.endTag(null, "date");
        xs.startTag(null, "type");
        xs.text(sms.getType());
        xs.endTag(null, "type");
        xs.startTag(null, "address");
        xs.text(sms.getAddress());
        xs.endTag(null, "address");
        xs.endTag(null, "sms");
      }
      xs.endTag(null, "message");
      xs.endDocument();
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
}