我们的Android应用程序会在后台每5分钟自动检查一次更新,并从我们的下载服务器下载最新的.apk文件。
然后使用以下方法触发安装:
public static void installDownloadedApplication(Context context) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
File sdcard = Environment.getExternalStorageDirectory();
File file = new File(sdcard, Constants.APPLICATION_CODE+".apk");
Uri uri = Uri.fromFile(file);
intent.setDataAndType(uri, "application/vnd.android.package-archive");
context.startActivity(intent);
}
这会提示最终用户(使用标准的Android OS应用程序安装提示)安装或取消应用程序apk。
如果我们的应用程序中只有一个需要更新,则无论该应用程序中的上述代码运行多少次,Android安装提示只会出现一次。
我们遇到的问题是,如果用户长时间离开他的Android设备并且他的应用程序的MULTIPLE需要同时自动更新,则每个应用程序每5分钟运行一次此代码,但现在多个Android为尝试安装的第二个应用程序显示安装提示。
示例1:只有应用程序X获得更新,用户将其保留15分钟,并且只显示应用程序X的一个安装提示。
示例2:应用程序X和Y都获得更新,用户离开15分钟,应用程序X出现1个安装提示,但应用程序Y出现3个安装提示
在示例2中可能导致问题的任何想法?
由于
答案 0 :(得分:1)
您的服务器会告诉您最新的APK。将其与下载区域中的相比较。如果您已经下载了最新版本,则无需再次下载。
此外,当您通过Intent
开始安装时,请记住将版本ID和日期/时间写入共享首选项。在X小时/天过去之前,请勿尝试再次安装相同版本。
答案 1 :(得分:0)
通过让我们的后台服务调用自定义活动,我设法让它在没有重复项的情况下正常工作:
public static void installDownloadedApplication(Context context) {
Intent intent = new Intent(context, InstallActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
然后我们的自定义活动执行后台服务过去做的事情:
/**
* We use an activity to kick off the installer activity in order to avoid issues that arise when kicking off the apk installer from a background services
* for multiple applications at the same time.
* */
public class InstallActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
File sdcard = Environment.getExternalStorageDirectory();
File file = new File(sdcard, Constants.APPLICATION_CODE+".apk");
Uri uri = Uri.fromFile(file);
intent.setDataAndType(uri, "application/vnd.android.package-archive");
this.startActivity(intent);
}
@Override
protected void onResume() {
super.onResume();
finish();
}
}