¿Es posible obtener la última fecha de modificación de un archivo de activos?
Bizarre pregunta: ¿es posible obtener la última fecha de modificación de un archivo en la carpeta de activos, o sería inútil e imposible?
Le pregunto porque estoy copiando una base de datos de sólo lectura de ahí en la carpeta de datos en el inicio de la aplicación, pero prefiero realizar la copia si el archivo existente es más antiguo que el almacenado en la carpeta de activos (o si el archivo No existe).
- ¿Cómo evitar la inserción de duplicados en la base de datos SQLite?
- Almacenamiento de datos grandes local o en línea para la aplicación de Android?
- ¿Es posible obtener acceso de sólo lectura a una base de datos sqlite en un apk?
- ¿Qué podría estar causando este SQLite CursorWindowAllocationException?
- Cómo obtener ArrayIndex fuera de límites Excepción al agregar nuevos elementos a la lista mientras se desplaza
Si eso no es posible, ¿alguien sabe de una convención mejor? Puedo publicar eso en una pregunta separada si es necesario. TIA!
- SQLCipher para Android: icudt46l.zip realmente necesario?
- Cómo insertar valor en la base de datos utilizando sqlite en android?
- Android: acceder a la base de datos SQLite a través del proveedor de contenido o implementar DAO?
- ¿Está bien tener una instancia de SQLiteOpenHelper compartida por todas las actividades en una aplicación de Android?
- Android: Cómo sumar todas las columnas de una base de datos SQLite y devolver 1 variable única
- Crear base de datos SQLite en android
- Cómo ver los datos guardados en la base de datos android (SQLite)?
- ¿Hay alguna forma de implementar la búsqueda de texto completo (FTS) en SQlite de la plataforma Android?
¿Qué tan grande y compleja es la base de datos? Es posible que sea más fácil y más flexible usar una instancia de SQLiteOpenHelper
para manejar esto ya que con una llamada a getReadableDatabase()
, creará si es necesario la base de datos y llamará a su onUpgrade
para actualizar la base de datos para usted.
Todo lo que tiene que hacer es proporcionar un onCreate()
para crear la base de datos, proporcionar onUpgrade()
para actualizar e incrementar la versión de la base de datos (en onUpgrade()
) cuando cambie y Android manejará la creación y actualización de la base de datos para usted.
Alternativamente, (y no lo he intentado), parece AssetManager.list()
puede proporcionarle una lista de rutas a sus activos, a continuación, utilice File (String path)
para obtener un objeto File para la base de datos, y finalmente File.lastModified()
para obtener la fecha modificada.
Oye, yo estaba teniendo el mismo problema que tú. Quería copiar y activos sólo si era más reciente. Así que hice el almacén sharedPreferences la última versión instalada, y la utilicé para comparar fechas:
Añado una entrada al archivo strings.xml para mantener la versión de la aplicación:
<string name="version">0.3</string>
Luego pongo una cláusula if en el método onCreate de la clase principal:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); if( Float.parseFloat(getString(R.string.version)) > prefs.getFloat("LastInstalledVersion", (float) 0.0 ) ) { copyfiles(); }
Y agrego la nueva cadena de versión a las sharedPreferences en el método onPause, de esa manera se añadirá con seguridad antes de que onCreate se llame de nuevo:
SharedPreferences prefs= PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor editor = prefs.edit(); editor.putFloat("LastInstalledVersion", Float.parseFloat(getString(R.string.version)) ); editor.commit();
Probablemente más simple que usar nombres de versión en el propio archivo.
Tenga en cuenta que los archivos de copia se ejecutarán la primera vez que se abra la aplicación, si tiene una versión por encima de 0.0 y sólo se volverá a ejecutar si aumenta la cadena de versión en versiones posteriores.
Tenga en cuenta que este ejemplo sólo funciona si tiene un único archivo para comparar, o no se preocupan por las versiones de archivos individuales. De lo contrario, podría utilizar varias cadenas diferentes para almacenar versiones de archivos.
Para un activo de solo lectura, traté de usar la marca de tiempo del archivo ( f.lastModified()
/ f.setSetModified(timestamp)
), y no funcionó porque f.setSetModified(timestamp)
no funciona en Android. Al menos, en el 2.3.4 que usé.
- Recyclerview vincula todas las vistas al mismo tiempo
- Android: forzar el micrófono externo (entrada jack 3,5 mm) para permanecer en