我正在开发一个应用程序,当用户将应用程序保存在他们的设备中时,其中的情况就是这样,然后7天之后我必须发送服务器请求以通知服务器。我怎么能这样做。
注意: - 我只需要在7天后发送服务器请求,而不是在7天后再发送一次。
答案 0 :(得分:2)
正如我告诉过你的那样。这是代码。我已经提到了需要实现Server请求的地方。你不需要改变其他任何东西。玩得开心。
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class MainActivity extends Activity {
SharedPreferences sharePref;
String endTime, currentTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.child);
sharePref=getSharedPreferences("App", Context.MODE_PRIVATE);
if(sharePref.getBoolean("isFirstTime", true)) {
checkFinalTime();
}
else if (!sharePref.getBoolean("isRequestSend", false)){
checkRemainingTime();
}
}
private void checkFinalTime(){
Calendar c = Calendar.getInstance();
c.add(Calendar.DAY_OF_YEAR, 7);
endTime = String.valueOf(c.get(Calendar.MONTH) + 1) + "/" + String.valueOf(c.get(Calendar.DAY_OF_MONTH)) + "/" +
String.valueOf(c.get(Calendar.YEAR)) + " " + String.valueOf(c.get(Calendar.HOUR_OF_DAY)) + ":" +
String.valueOf(c.get(Calendar.MINUTE)) + ":" + String.valueOf(c.get(Calendar.SECOND));
Log.d("End Time", endTime);
SharedPreferences.Editor editor = sharePref.edit();
editor.putBoolean("isFirstTime", false);
editor.putString("endTime", endTime);
editor.apply();
}
private void checkRemainingTime() {
Calendar c = Calendar.getInstance();
currentTime = String.valueOf(c.get(Calendar.MONTH) + 1) + "/" + String.valueOf(c.get(Calendar.DAY_OF_MONTH)) + "/" +
String.valueOf(c.get(Calendar.YEAR)) + " " + String.valueOf(c.get(Calendar.HOUR_OF_DAY)) + ":" +
String.valueOf(c.get(Calendar.MINUTE)) + ":" + String.valueOf(c.get(Calendar.SECOND));
endTime = sharePref.getString("endTime", null);
Log.d("Current Time", currentTime);
Log.d("End Time", endTime);
if (endTime != null) {
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Date d1 = null;
Date d2 = null;
try {
d1 = format.parse(currentTime);
d2 = format.parse(endTime);
long diff = d2.getTime() - d1.getTime();
if (diff >= 0) {
// Do the Server Request here. Don't delete anything.
Log.d("Diff", String.valueOf(diff));
SharedPreferences.Editor editor = sharePref.edit();
editor.putBoolean("isRequestSend", true);
editor.apply();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
保重
答案 1 :(得分:0)
尝试使用Timer计划“向服务器任务发送请求”,类似于此,更改为相关参数。
TimerTask tasknew = new TimerSchedulePeriod();
Timer timer = new Timer();
// scheduling the task at interval
timer.schedule(tasknew,100, 100);
答案 2 :(得分:0)
这可能会对你有帮助。
您可以从
获取应用安装时间 PackageManager pm = context.getPackageManager();
ApplicationInfo appInfo = pm.getApplicationInfo("app.package.name", 0);
String appFile = appInfo.sourceDir;
long installed = new File(appFile).lastModified();
您可以获取系统的当前日期,并轻松检查7天是否结束,您可以设置标志以检查api是否被击中。
您可以使用服务或在用户启动活动时执行此操作。