Intereting Posts
Как реализовать Диспетчер тегов Google в Кордове Нужно ли использовать _ID в качестве первичного ключа SQlite? И он должен быть INT? (Android Dev) Как проверить подключение к Интернету в сети в Android (используя интернет другого устройства через HOTSPOT) Retrofit2 + SimpleXML в Kotlin: MethodException: аннотация должна отмечать набор или метод get Добавление сертификата SSL в хранилище ключей Osmdroid – более высокий уровень масштабирования? Android installLocation при построении с cordova cli ProGuard вызывает задержку применения Проблема с использованием OpenCV2.3.1 с основной деятельностью Android Как получить средний цвет изображения Высота вложенного ресайклера не ограничивает его содержимое Как установить только числовое значение для edittext в android? Как установить Java.util.calendar на определенный период времени в будущем Как правильно сохранить диалог с помощью поворота? Java.lang.NoSuchMethodError при использовании getFragmentManager () с библиотекой actionbarsherlock

Возможно ли получить последнюю измененную дату из файла активов?

Необычный вопрос: возможно ли получить последнюю измененную дату файла в папке с ресурсами, или это будет бессмысленно и невозможно?

Я спрашиваю, потому что я копирую базу данных только для чтения оттуда в папку данных при запуске приложения, но скорее предпочту только выполнить копию, если существующий файл старше, чем тот, который хранится в папке с ресурсами (или если файл Не существует).

Если это невозможно, кто-нибудь знает о лучшей конвенции? Я могу опубликовать это в отдельном вопросе, если это необходимо. ТИА!

Solutions Collecting From Web of "Возможно ли получить последнюю измененную дату из файла активов?"

Насколько большой / сложной является база данных? Возможно, вам будет проще и гибче использовать экземпляр SQLiteOpenHelper для обработки этого, поскольку с помощью одного вызова getReadableDatabase() он создаст, если необходимо, базу данных и вызовет ваш onUpgrade для обновления базы данных для вас.

Все, что вам нужно сделать, это предоставить onCreate() для создания базы данных, обеспечить onUpgrade() для обновления и onUpgrade() версию базы данных (в onUpgrade() ), когда она изменится, и Android будет обрабатывать создание и обновление базы данных для вас.

В качестве альтернативы (и я не пробовал это), похоже, AssetManager.list() может предоставить вам список путей к вашим активам, затем использовать File (String path) для получения объекта File для базы данных и, наконец, File.lastModified() чтобы получить измененную дату.

Эй, у меня была такая же проблема, как и вы. Я хотел копировать и использовать активы только в том случае, если он был более новым. Поэтому я сделал хранилище sharedPreferences последней установленной версией и использовал это для сравнения дат:

Я добавляю запись в файл strings.xml для хранения версии приложения:

 <string name="version">0.3</string> 

Затем я помещаю предложение if в метод onCreate основного класса:

 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); if( Float.parseFloat(getString(R.string.version)) > prefs.getFloat("LastInstalledVersion", (float) 0.0 ) ) { copyfiles(); } 

И я добавляю новую строку версии в sharedPreferences по методу onPause, так что она будет добавлена ​​наверняка до того, как снова будет вызываться onCreate:

 SharedPreferences prefs= PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor editor = prefs.edit(); editor.putFloat("LastInstalledVersion", Float.parseFloat(getString(R.string.version)) ); editor.commit(); 

Вероятно, проще, чем использовать имена версий в самом файле.

Обратите внимание, что copyfiles будет запускаться при первом открытии приложения, если у вас есть версия выше 0.0, и будет работать только при увеличении строки версии в более поздних версиях.

Имейте в виду, что этот пример работает только в том случае, если у вас есть один файл для сравнения или нет необходимости в отдельных версиях файлов. В противном случае вы можете использовать несколько разных строк для хранения версий файлов.

Для ресурса, f.lastModified() только для чтения, я попытался использовать f.lastModified() метку файла ( f.lastModified() / f.setSetModified(timestamp) ), и это не сработало, потому что f.setSetModified(timestamp) не работает на Android. По крайней мере, на 2.3.4, который я использовал.

См. https://stackoverflow.com/a/13996418/755804