前段时间遇到一个奇葩的问题,通过网络自动更新不了,提示“应用未安装”,思来想去,折腾得死去活来之后发现了问题所在(我这边已经是配置了6.0以上的安装方法,网上有很多事例,这里就不再强调了):
private void installApk(Context context, File file) {
Intent intent = new Intent(Intent.ACTION_VIEW);
//判断是否是AndroidN以及更高的版本
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri contentUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".fileProvider", file);
intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
} else {
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
activity.startActivity(intent);
}
解决方式就是在安装之前先Finish掉已经打开的所有页面,完整代码如下:
private void installApk(Context context, File file) {
Intent intent = new Intent(Intent.ACTION_VIEW);
//判断是否是AndroidN以及更高的版本
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri contentUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".fileProvider", file);
intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
} else {
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
activity.startActivity(intent);
ExitAppUtils.getInstance().exit();
}
ExitAppUtils代码如下:
/**
* Description: 提供统一退出的工具类
* @autour: Jiang
* Date: 2017/2/17
*/
public class ExitAppUtils {
private List<Activity> mActivityList = new LinkedList<>();
private static ExitAppUtils instance = new ExitAppUtils();
/**
* 将构造函数私有化
*/
private ExitAppUtils() {
}
;
/**
* 获取ExitAppUtils的实例,保证只有一个ExitAppUtils实例存在
*
* @return
*/
public static ExitAppUtils getInstance() {
return instance;
}
/**
* 添加Activity实例到mActivityList中,在onCreate()中调用
*
* @param activity
*/
public void addActivity(Activity activity) {
mActivityList.add(activity);
}
/**
* 从容器中删除多余的Activity实例,在onDestroy()中调用
*
* @param activity
*/
public void delActivity(Activity activity) {
mActivityList.remove(activity);
}
/**
* 退出程序的方法
*/
public void exit() {
for (Activity activity : mActivityList) {
activity.finish();
}
System.exit(0);
}
}