2016-04-01 105 views
0

我想創建一個運行特定時間間隔的應用程序。如何限制Android應用程序只運行一段時間?

[編輯]按照一定的時間間隔,我的意思是用戶是否從Play商店下載應用程序。他可以查看固定時間段內的所有功能和功能,例如說X小時。之後,我們可以將任何類型的限制(任何用戶界面/導航限制,以便用戶無法查看功能)。

[問題的方案

什麼是最簡單的,以及這樣做的有效途徑?就像我不認爲這些解決方案將工作:

Calendar c = Calendar.getInstance(); 
int seconds = c.get(Calendar.SECOND); 

或者

Time now = new Time(); 
now.setToNow(); 

什麼是把限制(應用端或服務器端,因爲我在一些遊戲應用中看到的最好的方法,在服務器和應用程序之間進行同步,以便用戶不能簡單地更改時間並訪問功能)。

+0

請詳細解釋「運行一定時間間隔」的含義。 – CommonsWare

+0

如果有人從我的網站下載應用程序(爲他動態構建應用程序),那麼我希望應用程序運行,讓說1小時@CommonsWare – Killer

+0

讓說應用程序像亞馬遜下載後的作品,罰款和一小時後說「你好時間了」。 – Killer

回答

1

所以如果你想在第一次運行中運行你的應用程序一段時間,你需要保持一個軌道,如果它的第一次運行。所以你可以設置一個首選變量,這樣它可以告訴你,如果它是第一次運行或沒有。

現在設置一個CountDownTimer並將其設置爲運行一個小時,當計時器結束時,通過調用finish()關閉該活動。

SharedPreferences pref = getSharedPreferences("ApplicationTag", Activity.MODE_PRIVATE); 

if (pref.contains("FIRST_LAUNCH")){ 
    finish(); // As you want, it can't be used if the application launches second time. 

} else { 
    // Set the first launch flag to true. 
    pref.edit.putBoolean("FIRST_LAUNCH", true).commit(); 

    // Start the count down timer 
    new CountDownTimer(3600000, 1000) { 

    public void onTick(long millisRemaining) { 
     // Do nothing 
    } 

    public void onFinish() { 
     // Finish the Activity 
     finish(); 
    } 

}.start(); 

所以你可能會想,如果我在活動之間切換。因此,在這種情況下,您可以創建一個BaseActivity類,該類將由應用程序中的其他活動擴展。將CountDownTimer代碼放在那裏,並且在定時器完成時參考Context,然後再撥打context.finish()

因此,如果您不想限制首次啓動用戶,則需要以某種方式在應用程序中節省時間。當Activity完成後,您將在onDestroy函數中獲得回調。因此,請覆蓋onDestroy函數,並以毫秒爲單位再次設置一些偏好。這樣您可以在應用程序啓動時再次初始化計時器。

希望有幫助!

+0

是的,這很容易和有用,我在應用程序中添加CountDownTimer對象。所以每次都可以訪問。 – Killer

+0

問題是我不想限制用戶進行一次運行。這意味着我想保存剩餘的時間而不是first_launch變量。 所以問題是如何確定應用程序是由用戶還是由操作系統手動關閉。這樣我可以節省剩下的時間。 – Killer

+0

請參閱編輯答案。如果有幫助,標記爲已接受。 –

0

嘗試設置一個警報,在任何需要的時間後觸發任何活動。就像下面:

calendar = Calendar.getInstance(); 
Intent intent = new Intent(this, ActivityYouWantToStart.class); 
PendingIntent pIntent = PendingIntent.getBroadcast(this, 101, intent, 0); 
AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
calendar.add(Calendar.Hour,1); 
alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pIntent); 

呼叫時,用戶啓動您的代碼,第一次和內部ActivityYouWantToStart.class做你想要的時間量等以後做任何驗證碼。

+0

如果用戶保存更改日曆中的日期,該怎麼辦?這可能會破壞應用程序 – Killer

相關問題