简体   繁体   English

如果该应用已卸载,如何将sqlite数据库保留在android设备上?

[英]How to keep sqlite database on an android device if the app is uninstalled?

My sqlite database is automatically deleted when my app is uninstalled. 卸载我的应用程序后,我的sqlite数据库会自动删除。 I wish to keep the database, so I don't need to rebuild the database when I reinstall the app. 我希望保留数据库,因此在重新安装应用程序时不需要重建数据库。

By default, all databases of Android app are saved in /data/data/your-package-name/databases folder. 默认情况下,Android应用程序的所有数据库都保存在/ data / data / your-package-name / databases文件夹中。 When you uninstall the app, the /data/data/your-package-name directory and all of its subdirectory are deleted. 卸载应用程序时,/ data / data / your-package-name目录及其所有子目录都将被删除。 You can't keep the database files if they are saved in this location. 如果数据库文件保存在此位置,则无法保留它们。

But If you save your database files to SD card, the files are kept even after uninstall. 但是,如果将数据库文件保存到SD卡,即使卸载后文件仍会保留。

Here is an example of creating database is external directory 这是在外部目录中创建数据库的示例

public class DatabaseHelper extends SQLiteOpenHelper {
    public DatabaseHelper(final Context context) {
        super(context, Environment.getExternalStorageDirectory()
                + File.separator + FILE_DIR
                + File.separator + DATABASE_NAME, null, DATABASE_VERSION);
    ...

    }
    ...

}

This question is answered here How to store sqlite database directly on sdcard 在这里回答这个问题如何直接在sdcard上存储sqlite数据库

Remember to add permission to write external storage in your manifest 记住要添加权限以在清单中写入外部存储

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Also I see that READ_EXTERNAL_STORAGE & WRITE_EXTERNAL_STORAGE are classified as 'Dangerous Permissions' 我也看到READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE被归类为“危险权限”

reff: https://developer.android.com/guide/topics/permissions/requesting.html 雷夫: https//developer.android.com/guide/topics/permissions/requesting.html

You'll need to get user permission AT RUNTIME (only once). 您需要在运行时获得用户许可(仅一次)。 This page describes how to do it: https://developer.android.com/training/permissions/requesting.html 本页介绍了操作方法: https//developer.android.com/training/permissions/requesting.html

Here is sample code (from Read and Write permission for storage and gallery usage for marshmallow ) that does this check 这是执行此检查的示例代码(来自对棉花糖的存储和画廊使用的读写权限

public class MainActivity extends AppCompatActivity implements 

ActivityCompat.OnRequestPermissionsResultCallback{

  private static final int REQUEST_WRITE_PERMISSION = 786;

  @Override
  public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == REQUEST_WRITE_PERMISSION && grantResults[0] == PackageManager.PERMISSION_GRANTED) {            
        openFilePicker();
    }
  }

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    requestPermission();
  }

  private void requestPermission() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_PERMISSION);
    } else {
        openFilePicker();
    }
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM