¿Cómo usar SQLiteOpenHelper con la base de datos en la tarjeta SD?

De acuerdo con varias respuestas aquí y en la aplicación de extensión web y su método heredado getDatabasePath () permitiría establecer la ruta de almacenamiento de la base de datos desde la ubicación de memoria interna estándar a una tarjeta SD insertada de mayor tamaño.

Esto no funciona para mí. La construcción sugerida todavía está utilizando la base de datos en la memoria interna. De hecho, el método getDatabasePath () nunca es invocado por SQLiteOpenHelper.

Me gustaría poner esto en funcionamiento.

Esto es lo que hice hasta ahora:

1.) Aplicación de extensión:

public class MyApplication extends Application {

  @Override
  public File getDatabasePath(String name) {
    // Just a test
    File file = super.getDatabasePath(name);

    return file;
  }

  @Override
  public void onCreate() {
    // Just a test
    super.onCreate();
  }
}

2.) Agregar aplicación extendida al manifiesto:

<application
  ...
  android:name="MyApplication" 
  ... >

3.) Extender y usar SQLiteOpenHelper:

public class MySqliteOpenHelper extends SQLiteOpenHelper {

  public void onCreate(SQLiteDatabase sqliteDatabase) {
    ...
  }

  @Override
  public void onUpgrade(SQLiteDatabase sqliteDatabase, int oldVersion, int newVersion) {
    ...
  }
}

4.) Usar el SQLiteOpenHelper extendido en mis actividades de la manera habitual:

public class MyActivity extends Activity {

  private MySqliteOpenHelper mySqliteOpenHelper;
  private SQLiteDatabase     sqliteDatabase;

  @Override
  public void onCreate(Bundle bundle) {
    super.onCreate(bundle);
    ...
    mySqliteOpenHelper = new MySqliteOpenHelper(getApplicationContext());
    sqliteDatabase = mySqliteOpenHelper.getReadableDatabase();
    ...
  }

  @Override
  protected void onDestroy() {
    if (mySqliteOpenHelper != null) {
      mySqliteOpenHelper.close();
      mySqliteOpenHelper = null;
    }

    super.onDestroy();
  }
}

Quiero señalar que la clase de aplicación extendida está funcionando en general. Puedo ver esto porque se llama a MyApplication.onCreate (). Pero MyApplication.getDatabasePath () no se llama.

Cualquier ayuda es muy apreciada

Respuestas a la pregunta(6)

Su respuesta a la pregunta