Android 无法使用文件资源管理器查看外部存储中的数据库文件

Android 无法使用文件资源管理器查看外部存储中的数据库文件,android,file,android-sqlite,Android,File,Android Sqlite,我想在外部存储器中创建数据库,这样就可以很容易地从应用程序和计算机中修改它。使用应用程序添加或读取数据库时并没有问题,但在计算机或电话上使用文件资源管理器时并没有问题。此外,包目录(应该在Android/data中)也不存在 下面是如何创建数据库的 public class DatabaseManager extends SQLiteOpenHelper { public DatabaseManager(final Context context, String databaseName) {

我想在外部存储器中创建数据库,这样就可以很容易地从应用程序和计算机中修改它。使用应用程序添加或读取数据库时并没有问题,但在计算机或电话上使用文件资源管理器时并没有问题。此外,包目录(应该在Android/data中)也不存在

下面是如何创建数据库的

public class DatabaseManager extends SQLiteOpenHelper {

public DatabaseManager(final Context context, String databaseName) {
    super(new DatabaseContext(context), databaseName, null, VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_WAYPOINTS_TABLE = "CREATE TABLE " + WAYPOINTS_TABLE + "("
            + KEY_ID                + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + KEY_NAME              + " TEXT NOT NULL,"
            + KEY_CHARACTERISTIC    + " TEXT NOT NULL,"
            + KEY_UKC               + " FLOAT,"
            + KEY_LONGITUDE         + " DOUBLE,"
            + KEY_LATITUDE          + " DOUBLE"
            + ");";
    db.execSQL(CREATE_WAYPOINTS_TABLE);
}
和DatabaseContext,它应该更改数据库位置:

public class DatabaseContext extends ContextWrapper {

private static final String DEBUG_CONTEXT = "DatabaseContext";
public DatabaseContext(Context base) {
    super(base);
}

@Override
public File getDatabasePath(String name) {
    String dbFile = Environment.getExternalStorageDirectory()
            + File.separator + "Android/data"
            + File.separator + getPackageName()
            + File.separator + name;

    if (!dbFile.endsWith(".db")) {
        dbFile += ".db" ;
    }

    File result = new File(dbFile);
    if (!result.getParentFile().exists()) {
        result.getParentFile().mkdirs();
    }

    if (Log.isLoggable(DEBUG_CONTEXT, Log.WARN)) {
        Log.w(DEBUG_CONTEXT, "getDatabasePath(" + name + ") = " + result.getAbsolutePath());
    }

    return result;
}

@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory)    {
    SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null);

    if (Log.isLoggable(DEBUG_CONTEXT, Log.WARN)){
        Log.w(DEBUG_CONTEXT, "openOrCreateDatabase(" + name + ",,) = " + result.getPath());
    }

    return result;
}
当我打印DatabaseContext.getDatabasePathdatabaseName结果时,我得到

/存储/仿真/0/Android/data/com.bearcave.passageplanning/database.db

果然


问题是我做错了什么,数据库和包目录不是在外部存储目录中创建的?

问题是,自从添加了Android level 11新的openOrCreateDatabase方法之后,我没有对其进行重写。当我补充说:

@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory, DatabaseErrorHandler errorHandler) {
    return openOrCreateDatabase(name, mode, factory);
}

DatabaseContext开始正常工作,数据库已在外部存储中创建。

谢谢您的回答,但我没有提供帮助