Java Api 29(Android Q)的外部应用程序目录中的SQLiteOpenHelper

Java Api 29(Android Q)的外部应用程序目录中的SQLiteOpenHelper,java,android,sqlite,sqliteopenhelper,android-10.0,Java,Android,Sqlite,Sqliteopenhelper,Android 10.0,对于android Q Api 29,我如何执行以下情况 我的目的是保存在一个目录中,该目录在卸载应用程序后将继续存在 它具有以下类及其构造函数: public class SqlHelper extends SQLiteOpenHelper { //constructor SqlHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {

对于android Q Api 29,我如何执行以下情况


我的目的是保存在一个目录中,该目录在卸载应用程序后将继续存在

它具有以下类及其构造函数:

    public class SqlHelper extends SQLiteOpenHelper {
    //constructor
     SqlHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
            super(context, name, factory, version);
        }

    //rest of the class

    }
在我的DAO中调用数据库时:

public class Dao {

    private Context context;
    protected SQLiteDatabase db;

    public Dao(Context context) {
        this.context = context;
    }

    protected void openDataBase() {
        String pathDB = FOLDER_NAME_DBASE;
        //getExternalStorageDirectory() deprecated Api 29
        File dir = new File(Environment.getExternalStorageDirectory(), pathDB);


        String dBasePath = dir.getPath() + "/" + mydatabse.db3;

        SqlHelper varHelp = new SqlHelper(
                context,
                dBasePath,
                null,
                DBASE_VERSION
        );

        db = varHelp.getWritableDatabase();
    }

   //rest of the class

}
使用SQLiteOpenHelper有没有办法在Api 29的公共文档文件夹中创建数据库


感谢您的关注

对于任何版本的Android来说,在外部存储上放置实时SQLite数据库都是不明智的。数据损坏的风险更大,因为其他应用程序可能会尝试使用该文件


但是,如果希望忽略该建议,可以使用Android 10上的getExternalFilesDir作为数据库的基本目录。这是用户可以访问的,尽管位置不太友好。

您是否尝试将android:requestLegacyExternalStorage=true添加到清单中,我将尝试。ThanksMy的目的是保存在卸载应用程序后仍将存在的目录中。卸载应用程序后,使用getExternalFilesDir将显示当前文件removed@MurilloComino只需启用备份,然后,它至少会在重新安装时被还原。对于调试版本,这应该被禁用。@MurilloComino:我的目的是在卸载应用程序后保留在一个将继续存在的目录中-您需要在备份或导出选项中这样做。您不再能够直接访问您所寻找的位置,SQLite需要直接访问文件系统。感谢您的支持,我将遵循这些建议。