我在我的應用程序中下載了一個視頻。我想在1周後刪除該視頻。由於我的應用程序也可以在離線狀態下工作,因此我們無法跟蹤服務器的時間我們如何知道內容是否已過期,以便在此之後它可以被刪除? 我們不能依賴系統時間,因爲用戶可以隨時更改它。在android中的跟蹤時間
回答
可以通過多種方式獲得。一種方法是使用持久數據庫,如sharepreferences。
將視頻下載日期保存在sharedpreferences中,並將視頻名稱作爲關鍵字。並在應用程序中編寫邏輯,這樣,每天一次當應用程序打開時, 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);
會議希望它可以幫助!
如果用戶每次打開應用程序時都更改系統日期會怎樣。 –
如果是這種情況,那麼你必須從某個服務器獲取當前時間,而不能依賴系統時間。 – sumit
- 1. 在android中的小時間跟蹤器
- 2. Android時間跟蹤器
- 3. 跟蹤時間在Java中
- 4. 獨立於系統時間的Android中的時間跟蹤器
- 5. MVC4在線跟蹤時間
- 6. 的Quickbooks時間跟蹤
- 7. 在Android中每個應用上花費的跟蹤時間?
- 8. 用戶開始在Android中跟蹤位置的日期時間
- 9. 在Android中某個位置所花費的跟蹤時間
- 10. 如何在cocos2d中跟蹤時間
- 11. 在android中跟蹤位置
- 12. Visual Studio Online中的時間跟蹤
- 13. 在MSCRM花費的跟蹤時間
- 14. 如何跟蹤的時間在Java
- 15. 用Mbed跟蹤時間
- 16. 時間跟蹤解析器
- 17. 辛跟蹤Android中
- 18. 狀態更改時的時間跟蹤
- 19. Android Studio中的時間跟蹤工具窗口
- 20. Android - 跟蹤
- 21. iOS4在後臺和時間間隔中的位置跟蹤
- 22. Android系統跟蹤[跟蹤標記]
- 23. Android位置跟蹤器在很長一段時間後崩潰
- 24. 跟蹤在Android中發送的短信
- 25. 在android中的位置跟蹤背景
- 26. 保持時間的跟蹤Java程序
- 27. 如何跟蹤程序的總時間?
- 28. 用戶遲到的時間差,跟蹤
- 29. 跟蹤長時間的重複操作
- 30. 簡單的C++時間跟蹤器
你必須維護一個sqlite數據庫,以記錄你下載到你的設備的視頻,並保持記錄像,視頻下載時間和視頻本地路徑,你可以在這裏保存從服務器下載時間和當用戶打開應用程序再用7天前的視頻下載時間檢查你的數據庫,如果視頻時間比7天更早,並且使用這些路徑可以刪除視頻文件,則將查詢視頻提取爲本地路徑。 –
@AniruddhParihar當用戶打開應用程序時,我們必須使用系統時間正確嗎?由於用戶可以更改系統日期,因此他們可以輕鬆作弊。 –
如果你從設備端驗證用戶,那麼他們肯定會欺騙你,但是如果你從服務器端驗證用戶,那麼你可以申請檢查設備時間和服務器時間,......另一種方法是,如果你要存儲在db下載的時間,然後你可以申請檢查下載視頻時間和設備當前時間的最早日期,並確保設備當前時間不低於那個最舊的下載時間。 –