roblema @SQLiteOpenHelper com o nome completo do caminho do banco de dados

No meu aplicativo, eu uso ...

myFilesDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath()
                      + "/Android/data/" + packageName + "/files");
myFilesDir.mkdirs();

Isso é bom e o caminho resultante é ...

/mnt/sdcard/Android/data/com.mycompany.myApp/files

Preciso de um banco de dados SQLite que desejo armazenar no cartão SD, estendo o SQLiteOpenHelper da seguinte forma ...

public class myDbHelper extends SQLiteOpenHelper {

    public myDbHelper(Context context, String name, CursorFactory factory, int version) {
        // NOTE I prefix the full path of my files directory to 'name'
        super(context, myFilesDir + "/" + name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // Create tables and populate with default data...
    }
}

Tão longe tão bom - a primeira vez que eu ligogetReadableDatabase() ougetWriteableDatabase() o banco de dados vazio é criado no cartão SD eonCreate() preenche.

Então, aqui está o problema - o aplicativo está em teste beta com talvez 5 ou 6 pessoas e, como eu, está executando o Android v2.2 e tudo funciona bem. Eu tenho um testador, no entanto, executando a v2.1 e quandomyDbHelper tenta criar o banco de dados no primeiro uso, ele trava com o seguinte ...

E/AndroidRuntime( 3941): Caused by: java.lang.IllegalArgumentException: File /nand/Android/data/com.mycompany.myApp/files/myApp-DB.db3 contains a path separator
E/AndroidRuntime( 3941): at android.app.ApplicationContext.makeFilename(ApplicationContext.java:1445)
E/AndroidRuntime( 3941): at android.app.ApplicationContext.openOrCreateDatabase(ApplicationContext.java:473)
E/AndroidRuntime( 3941): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:193)
E/AndroidRuntime( 3941): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
E/AndroidRuntime( 3941): at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:158)

O caminho para o diretório de arquivos é estranho ("/ nand"), pois é a memória interna, embora não seja a memória interna do telefone - mas é o caminho retornado porgetExternalStorageDirectory() para este dispositivo.

Posso ver três respostas possíveis ...

Embora aceitável na v2.2, a especificação de um caminho completo para o nome do banco de dados não é recomendada e falhará nas versões anteriores Caminhos totalmente qualificados são aceitáveis para armazenamento do cartão SD, mas o caminho "/ nand" está sendo interpretado como 'interno' e, neste caso, somente caminhos relativos são aceitáveisAlgo mais que estou perdendo completamente

Se algum ou todos os itens acima se aplicarem, eu apreciaria se alguém pudesse ajudar com a maneira como eu deveria abordar iss

Obrigado

questionAnswers(5)

yourAnswerToTheQuestion