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" ?.
- ¿Cómo mover aplicaciones spcific a / de la tarjeta sd usando ADB?
- ¿Cómo puedo leer el archivo json de la tarjeta SD
- Movimiento de Android al comportamiento de la tarjeta SD
- Almacenamiento extraíble (externo) vía sdcard por los fabricantes
- ¿TODOS los dispositivos Android tienen una tarjeta SD interna?
¿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
- No puedo obtener la ruta real de la tarjeta SD extraíble. ¿Hay alguna manera de conseguir?
- Tarjeta sd android
- ¿Cómo crear un directorio en Android?
- Exportar archivo de base de datos sqlite en XML y luego en la hoja de cálculo de Excel
- Android: Detectar cuando la tarjeta SD montada como unidad de disco a un equipo
- Cómo almacenar la base de datos SQLite de Android en sdcard
- Lista todas las imágenes de la tarjeta SD.
- ¿Cómo puedo acceder y almacenar datos en la tarjeta sd en todos los dispositivos Android?
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.
- Android GCM: no obtener el token de registro en el método onCreate ()
- Firefox para Android (v18) ¿Restablecer CSS?