我想知道设备上已经安装了多长时间。
原因: 我想为很久以前安装了该应用程序的用户宣布该应用程序的新更新,并希望阻止为刚刚安装该应用程序的用户公布此更新。我讨厌自己在应用程序中做广告:-)所以我想谨慎,只为很久以前安装了应用程序的用户显示公告。 (抱歉我的英语不好)
我不想使用的是以下内容,因为这允许我仅从更新的版本中检测到这一点,我实现了它: - 使用谷歌分析。 - 计算房产中appstart的计数器
我正在寻找我现在在2014年实施的解决方案,并检测到自2013年以来安装了应用程序。
任何提示?
答案 0 :(得分:1)
向前迈进的最简单方法是使用一对SharedPreferences
:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(new Context());
boolean firstRun = prefs.getBoolean("IS_FIRST_RUN", true);
long now = System.currentTimeMillis();
if (firstRun)
{
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("IS_FIRST_RUN", false);
editor.putLong("FIRST_RUN_MILLIS", now);
editor.apply();
}
else
{
long dateFirstRun = prefs.getLong("FIRST_RUN_MILLIS", 0L);
if (dateFirstRun == 0L)
{
// no value saved. decide how you want to handle
}
else if (now - dateFirstRun < SOME_AGE)
{
// offer extra functionality
}
}
如果您想查看过去的安装信息,我认为您必须使用PackageManager
编辑:正如理查德在上述评论中所说:
try
{
long firstInstall = context.getPackageManager().getPackageInfo("package.name", 0).firstInstallTime;
}
catch (PackageManager.NameNotFoundException e)
{
e.printStackTrace();
}
答案 1 :(得分:0)
根据我的经验,如果应用程序在Google Play上,我会使用UrbanAirship,Parse或原始GCM实施等服务与个人服务器注册设备,并能够向每个手机发送推送消息。 我不介意已安装的应用程序,因为设备上的Play商店应用程序会在可用时通知用户有关更新的信息。
现在,如果该应用不在Google Play上,但仍然消耗了api,您可以利用它并发送一次性促销信息以下载具有新功能的新版本:
//TODO Receive message here
//check preferences
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
if(!prefs.getBoolean("alreadyAdvertised", false)){
prefs.edit().putBoolean("alreadyAdvertised", true).commit();
//TODO display message here
}
希望它有所帮助。