Отслеживать время в андроид
Я загрузил видео в своем приложении. Я хотел удалить это видео через 1 неделю. Так как мое приложение также работает в автономном режиме, мы не можем отслеживать время с сервера. Как мы узнаем, истек ли срок содержания, чтобы после этого его можно было удалить? Мы не можем полагаться на системное время, так как пользователь всегда может его изменить.
2 ответа
Можно достичь разными способами. Одним из способов является использование постоянной базы данных, например, sharepreferences.
Сохраните дату загрузки видео в общих настройках с именем видео в качестве ключа. и написать логику в приложении таким образом, чтобы ежедневно один раз, когда приложение открывалось, 1) проверять даты сохраненных видео с сегодняшней датой 2) удалять просроченные видео.
Вы можете использовать SharedPreference для этого.
Вот попробуйте это:
public class SessionManager {
private static final String TAG = "SessionManager";
// Shared Preferences
SharedPreferences pref;
// Editor for Shared preferences
SharedPreferences.Editor editor;
// Context
Context _context;
// Shared pref mode
int PRIVATE_MODE = 0;
// Sharedpref file name
private static final String PREF_NAME = "MyPref";
public static final String KEY_DOWNLOAD_TIME = "login_time";
public static final String KEY_DELETE_TIME = "logOut_time";
// Constructor
public SessionManager(Context context){
this._context = context;
pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
editor = pref.edit();
}
/**
* Create session
* */
public void createLoginSession(String downloadTime, String deleteTime){
//storing downloadTime in pref
editor.putString(KEY_DOWNLOAD_TIME,downloadTime);
//storing loginTime in pref
editor.putString(KEY_DELETE_TIME,deleteTime);
// commit changes
editor.commit();
}
/**
* Get stored session data
* */
public HashMap<String, String> getUserDetails(){
HashMap<String, String> user = new HashMap<>();
//user download time
user.put(KEY_DOWNLOAD_TIME, pref.getString(KEY_DOWNLOAD_TIME, null));
//user delete time
user.put(KEY_DELETE_TIME, pref.getString(KEY_DELETE_TIME, null));
// return user
return user;
}
}
Теперь из вашей деятельности
SessionManager session;
private Calendar calendar;
private SimpleDateFormat df;
protected void onCreate(Bundle savedInstanceState) {
calendar = Calendar.getInstance();
String template = "yyyy-MM-dd HH:mm:ss";
df = new SimpleDateFormat(template, Locale.getDefault());
session = new SessionManager(getApplicationContext());
HashMap<String, String> user = session.getUserDetails();
String deleteTime = user.get(SessionManager.KEY_DELETE_TIME);
String currentTime = df.format(calendar.getTime());
if (currentTime.compareTo(deleteTime)>=0){
//session expired delete video
}
else {
//session is still active don't delete
}
}
И где бы вы ни загружали видео, начинайте сессию вот так
String downloadTime = df.format(calendar.getTime());
calendar.add(Calendar.DAY_OF_YEAR,7);
String deleteTime = df.format(calendar.getTime());
session.createLoginSession(downloadTime, deleteTime);
Надеюсь, поможет!!