简体   繁体   中英

How to restrict the Android application to run only a certain time period?

I want to create an application that runs for a certain time interval .

[EDITED] By certain time interval, I mean if a user downloads an application from the play store. He can review all the features and functionality for a fixed period of time let say X hours only. After that, we can put any kind restriction (any UI/Navigation restriction so that user cannot review the features).

[The Problem]

what is the easiest as well as an efficient way of doing it? Like I don't think these solutions will work:

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

Or

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

What is the best way of putting restrictions (application side or server side as I have seen in some of the game application, where a synchronization is made between a server and application so that user cannot simply change the time and access the features).

So if you want to run your application for a certain period of time in the first run you need to keep a track if its a first run. So you might take set a preference variable so that it can tell you that if its a first run or not.

Now set a CountDownTimer and set it to run for an hour and when the timer is finished, close the Activity by calling finish() to it.

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();

So you might thinking that what if I switch between Activities. So in that case, you make create a BaseActivity class which will be extended by other Activities in your application. Place the CountDownTimer code there and take a reference of the Context you're in then call context.finish() when the timer is finished.

So in case of you don't want to limit the user for first launch, you need to save the time somehow in your application. When the Activity is finished, you'll get the callback in onDestroy function. So override the onDestroy function and set some preference again with the remaining time in mili seconds. So that you can initialize the timer again when the application starts.

Hope that helps!

Try setting an Alarm for firing any activity after any amount of time you want. Like following:

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);

Call this code when user launches your code for first time and inside ActivityYouWantToStart.class do whatever you want to do after such amount of time.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM