以编程方式备份​​没有root权限的android调用日志和SMS

时间:2013-09-23 21:58:34

标签: android sqlite backup adb

我只想以编程方式备份​​SMS消息并调用我自己的android的日志(我希望将其作为更大的备份脚本的一部分进行集成)。有一个名为“短信备份和恢复”的用户应用程序可以执行此操作。 (如何从USB接口运行应用程序?)

当我尝试时,

adb shell sqlite > dump

我得到permission denied。每次其他尝试读取数据库以访问这些日志,我理解是在

data/data/com.sec.android.provider.logsprovider/databases/logs.db

符合permission denied

我读到的是解决此权限问题的唯一方法是root设备,我现在不想这样做。

有没有办法通过adb执行此操作?如果必须的话,我不介意最终写一个应用程序,但我想知道是否有更简单的方法。

1 个答案:

答案 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();
    }