我想读取(只)从data/data/com.android.providers.telephony/databases/mmssms.db记录(我不知道官方的API等,但因为它缺乏官方API我必须这样做)。我以为我可以像在过去的答案写How to access an existing sqlite database in Android?,只是android SQLite读取访问
SQLiteDatabase db = SQLiteDatabase.openDatabase("data/data/com.android.providers.telephony/databases/mmssms.db ", null, 0);
但系统无法打开DB文件。接下来,我想我可能需要创建一个完全成熟的DB Helper类
package com.test.dbaccess;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DbAdapterMms
{
private final Context ctx;
private DatabaseHelper dbHelper;
public SQLiteDatabase db;
private static class DatabaseHelper extends SQLiteOpenHelper
{
private final Context ctx;
DatabaseHelper(Context context)
{
super(context, "data/data/com.android.providers.telephony/databases/mmssms.db", null, 1);
this.ctx = context;
}
@Override
public void onCreate(SQLiteDatabase db)
{
//do nothing, this should exist
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
//do nothing, reading only
}
}
public DbAdapterMms(Context context)
{
this.ctx = context;
}
public void open()
{
dbHelper = new DatabaseHelper(ctx);
db = dbHelper.getReadableDatabase();
}
public void close()
{
dbHelper.close();
}
}
它仍然无法正常工作,这个时候我想可能是在调用super的问题();因为那里必须提供DBVersion。我不知道的版本,我只想读取现有的数据库。不能成为火箭......
任何帮助吗? 谢谢,答:
请不要搞乱其他应用程序的数据库。你可能会争辩说你只想阅读。但是,你的崇高意图不会阻止别人想到别的东西,这会让分贝腐败。因此,为了防止这种行为(自愿或不愿意),直接访问其他应用程序受到限制。虽然,您可以根据您的电话并承担风险和责任 – 2011-03-24 10:11:14