2017-06-21 74 views
0

我在我的應用程序中下載了一個視頻。我想在1周後刪除該視頻。由於我的應用程序也可以在離線狀態下工作,因此我們無法跟蹤服務器的時間我們如何知道內容是否已過期,以便在此之後它可以被刪除? 我們不能依賴系統時間,因爲用戶可以隨時更改它。在android中的跟蹤時間

+0

你必須維護一個sqlite數據庫,以記錄你下載到你的設備的視頻,並保持記錄像,視頻下載時間和視頻本地路徑,你可以在這裏保存從服務器下載時間和當用戶打開應用程序再用7天前的視頻下載時間檢查你的數據庫,如果視頻時間比7天更早,並且使用這些路徑可以刪除視頻文件,則將查詢視頻提取爲本地路徑。 –

+0

@AniruddhParihar當用戶打開應用程序時,我們必須使用系統時間正確嗎?由於用戶可以更改系統日期,因此他們可以輕鬆作弊。 –

+0

如果你從設備端驗證用戶,那麼他們肯定會欺騙你,但是如果你從服務器端驗證用戶,那麼你可以申請檢查設備時間和服務器時間,......另一種方法是,如果你要存儲在db下載的時間,然後你可以申請檢查下載視頻時間和設備當前時間的最早日期,並確保設備當前時間不低於那個最舊的下載時間。 –

回答

0

可以通過多種方式獲得。一種方法是使用持久數據庫,如sharepreferences。

將視頻下載日期保存在sharedpreferences中,並將視頻名稱作爲關鍵字。並在應用程序中編寫邏輯,這樣,每天一次當應用程序打開時, 1)檢查保存的視頻日期與今天的日期 2)刪除過期的視頻。

+0

用戶可能無法每天打開應用程序,因此我們無法每天驗證日期。而且,由於用戶可以隨時更改系統日期,因此我們無法將其與下載日期進行比較。 –

0

您可以爲此使用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); 

會議希望它可以幫助!

+0

如果用戶每次打開應用程序時都更改系統日期會怎樣。 –

+0

如果是這種情況,那麼你必須從某個服務器獲取當前時間,而不能依賴系統時間。 – sumit