我只想以编程方式备份SMS消息并调用我自己的android的日志(我希望将其作为更大的备份脚本的一部分进行集成)。有一个名为“短信备份和恢复”的用户应用程序可以执行此操作。 (如何从USB接口运行应用程序?)
当我尝试时,
adb shell sqlite > dump
我得到permission denied
。每次其他尝试读取数据库以访问这些日志,我理解是在
data/data/com.sec.android.provider.logsprovider/databases/logs.db
符合permission denied
。
我读到的是解决此权限问题的唯一方法是root设备,我现在不想这样做。
有没有办法通过adb执行此操作?如果必须的话,我不介意最终写一个应用程序,但我想知道是否有更简单的方法。
答案 0 :(得分:2)
您必须以root用户身份访问/ data / data目录。如果没有root,您可以编写一个程序来迭代MMS-SMS内容提供程序并将结果转储到您自己的数据库中(您可以导出/执行任何您想要的操作)。
这样的例子:
try{
Uri uri = Uri.parse("content://sms");
ContentResolver contentResolver = getContentResolver();
Cursor SMSL = contentResolver.query(uri, null, null, null, "date asc");
while (SMSL.moveToNext()) {
long dateTimeMillis = SMSL.getLong(SMSL.getColumnIndex("date"));
Integer id1 = SMSL.getInt(SMSL.getColumnIndex("_id"));
String body = SMSL.getString(SMSL.getColumnIndex("body"));
Integer type1 = SMSL.getInt(SMSL.getColumnIndex("type"));
String address = SMSL.getString(SMSL.getColumnIndex("address"));
String read = SMSL.getString(SMSL.getColumnIndex("read"));
String seen = SMSL.getString(SMSL.getColumnIndex("seen"));
//Do whatever with the data here
SMSL.close();
}
} catch (Exception e){
e.printStackTrace();
}