Copiar un archivo de texto en la tarjeta SD en el momento de la instalación de la aplicación?

Estoy trabajando en un juego de Android. Quiero copiar un archivo de texto a una tarjeta SD externa cuando el usuario instale el juego por primera vez. El archivo de texto es importante para ejecutar correctamente el juego.

¿Cómo puedo hacer eso? ¿Dónde debo colocar el archivo de texto en el proyecto de origen eclipse para que cuando construyo el archivo apk, mi archivo de texto también se empaqueta en él y cuando un uso instala la aplicación de ese archivo apk el archivo de texto se copia a la carpeta "SDcard \ data" ?.

¿Qué código debo escribir y dónde, para que se ejecute sólo una vez en el momento de la instalación.

Gracias por adelantado

Estos son los métodos que utilizo para copiar un archivo a la tarjeta sd cuando se instala la aplicación por primera vez:

public class StartUp extends Activity { /** * -- Called when the activity is first created. * ============================================================== **/ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FirstRun(); } private void FirstRun() { SharedPreferences settings = this.getSharedPreferences("YourAppName", 0); boolean firstrun = settings.getBoolean("firstrun", true); if (firstrun) { // Checks to see if we've ran the application b4 SharedPreferences.Editor e = settings.edit(); e.putBoolean("firstrun", false); e.commit(); // If not, run these methods: SetDirectory(); Intent home = new Intent(StartUp.this, MainActivity.class); startActivity(home); } else { // Otherwise start the application here: Intent home = new Intent(StartUp.this, MainActivity.class); startActivity(home); } } /** * -- Check to see if the sdCard is mounted and create a directory w/in it * ======================================================================== **/ private void SetDirectory() { if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) { extStorageDirectory = Environment.getExternalStorageDirectory().toString(); File txtDirectory = new File(extStorageDirectory + "/yourAppName/txt/"); // Create // a // File // object // for // the // parent // directory txtDirectory.mkdirs();// Have the object build the directory // structure, if needed. CopyAssets(); // Then run the method to copy the file. } else if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED_READ_ONLY)) { AlertsAndDialogs.sdCardMissing(this);//Or use your own method ie: Toast } } /** * -- Copy the file from the assets folder to the sdCard * =========================================================== **/ private void CopyAssets() { AssetManager assetManager = getAssets(); String[] files = null; try { files = assetManager.list(""); } catch (IOException e) { Log.e("tag", e.getMessage()); } for (int i = 0; i < files.length; i++) { InputStream in = null; OutputStream out = null; try { in = assetManager.open(files[i]); out = new FileOutputStream(extStorageDirectory + "/yourAppName/txt/" + files[i]); copyFile(in, out); in.close(); in = null; out.flush(); out.close(); out = null; } catch (Exception e) { Log.e("tag", e.getMessage()); } } } private void copyFile(InputStream in, OutputStream out) throws IOException { byte[] buffer = new byte[1024]; int read; while ((read = in.read(buffer)) != -1) { out.write(buffer, 0, read); } } 

Para este objetivo la mejor manera es hacer SharedPreferences o su archivo debe ser añadido en el directorio "assets" en el proyecto android.

Como por enlace

Existe el intento de difusión ACTION_PACKAGE_ADDED, but the application being installed doesn't receive this.

Así que parece que usar SharedPreferences es la forma más fácil …

 SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(this); boolean firstRun = p.getBoolean(PREFERENCE_FIRST_RUN, true); p.edit().putBoolean(PREFERENCE_FIRST_RUN, false).commit(); 

Coloque el archivo en la carpeta de activos. A continuación, utilizando cualquier lógica que aparezca, cuando los lanzamientos de aplicaciones determinen si es la primera ejecución de la aplicación.

Si es usted puede utilizar getAssets () de una actividad para tener acceso al archivo del activo y apenas copiarlo dondequiera que sea necesario.

Dado que el archivo en la tarjeta SD es algo que el usuario podría borrar accidentalmente, probablemente debería comprobar directamente su presencia (y, posiblemente, verificar el contenido) en lugar de intentar utilizar algo independiente como una preferencia compartida para saber si es la primera de la actividad.

Para propósitos de posibles actualizaciones de aplicaciones, probablemente debería poner un número de versión en el archivo y comprobarlo.

Si el archivo es algo que desea que los usuarios avanzados editen manualmente (para cambiar las opciones de expertos), es posible que tenga un poco de una situación difícil de manejar en la actualización.

  • Donde el listview almacena la imagen en android cuando se descarga desde el servidor
  • ¿Cómo usar la nueva API de acceso a tarjetas SD de Lollipop en dispositivos que ejecutan KITKAT?
  • establecer ubicación de instalación no funciona
  • Android obtiene imágenes de sdcard
  • Problemas con la tarjeta SD de Android
  • Android - ¿Cómo crear la carpeta en sdcard con el icono de la aplicación con la esquina izquierda hacia abajo?
  • Simple mediaplayer reproducir mp3 desde la ruta del archivo?
  • MediaStore.Images.Media.insertImage devuelve null al intentar guardar la imagen
  • ¿Cómo acceder al almacenamiento extraíble en dispositivos Android?
  • IllegalStateException al grabar un video en una tarjeta SD externa con el nuevo Storage Access Framework (SAF)
  • Cómo guardar una imagen en una galería de almacenamiento externa en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.