root后读取系统短信
1、修改mmssms.db权限和mmssms.db-journal为777 2、使用后又修改权限为650 3、RootTools.jar 方便在android中发送指令的工具jar |
mmssms.db-journal是什么文件?android sqlite *.db-journal
这两天由于项目需要开始使用sqlite数据库,可是在操作过程中,在databases文件下生成*.db的同时总会对应生成一个*.db-journal。刚开始在网上查找原因,网上有人说是数据库操作错误时生成的日志,可是再怎么仔细检查,都发现我对数据库的操作都是正确的,不会有异常,而且*.db-journal文件的大小一直是0.
后来看了下sqlite的官方文档,发现该文件是sqlite的一个临时的日志文件,主要用于sqlite数据库的事务回滚操作了。在事务开始时产生,在事务操作完毕时自动删除,当程序发生崩溃或一些意外情况让程序非法结束时,此文件便保存在了磁盘上,以便下次运行时进行事务回滚。
而android自己的一些机制,又使*.db-journal一直存在。即第一次操作数据库时,*.db-journal文件会被自动创建,且是永久的保存在磁盘中,不会被自动清除的,如果没有操作异常或者不需要事务回滚时,此文件的大小为0。这种机制避免了每次生成和删除*.db-journal文件的开销
|
核心代码: public void click(View view) {
try {
// 修改mmsms.db的权限为777
Runtime.getRuntime().exec("su");
RootTools.sendShell("chmod 777 /data/data/com.android.providers.telephony/databases/mmssms.db",30000);
RootTools.sendShell("chmod 777 /data/data/com.android.providers.telephony/databases/mmssms.db-journal",30000);
String path = "/data/data/com.android.providers.telephony/databases/mmssms.db";
SQLiteDatabase database = SQLiteDatabase.openDatabase(path, null,SQLiteDatabase.OPEN_READONLY);
StringBuffer sb = new StringBuffer();
Cursor cursor = database.query("main.sms", null, null, null, null, null, null);
while (cursor.moveToNext()) {
String address = cursor.getString(cursor.getColumnIndex("address"));
String body = cursor.getString(cursor.getColumnIndex("body"));
String result = "短信来件人:" + address + " 短信内容:" + body + "/n";
sb.append(result);
System.out.println(address+":"+body);
}
tv.setText(sb.toString());
database.close();
cursor.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// 用完之后重新修改mmsms.db的权限为660
RootTools.sendShell("chmod 660 /data/data/com.android.providers.telephony/databases/mmssms.db", 30000);
RootTools.sendShell("chmod 777 /data/data/com.android.providers.telephony/databases/mmssms.db-journal",30000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
|