电视TV开发之App应用内升级可以下载,执行权限了,相同包名还是无法安装
* 安装应用
*
* @param context
* @param apkPath
*/
public static void installApp(Context context, String apkPath) {
Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);//系统应用才拥有的权限
//Intent intent = new Intent(Intent.ACTION_VIEW);//常规的第三方应用安装设置的action
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uri uri;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
uri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileProvider",new File(apkPath));
} else {
uri = getApkFileUrl(new File(apkPath));
}
intent.setDataAndType(uri, "application/vnd.android.package-archive");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
boolean hasInstallPermission = context.getPackageManager().canRequestPackageInstalls();
if (!hasInstallPermission) {
Toast.makeText(context, "需要手动打开允许安装未知来源应用开关", Toast.LENGTH_SHORT).show();
//startInstallPermissionSettingActivity(context);
context.startActivity(intent);
}else {
context.startActivity(intent);
}
}else {
context.startActivity(intent);
}
}
下面方法不用调用和使用,和手机安装逻辑不通;这个问题困扰了很长时间,无意中注释居然安装成功了;
* 跳转到设置-允许安装未知来源-页面
*/
@RequiresApi(api = Build.VERSION_CODES.O)
public static void startInstallPermissionSettingActivity(Context context) {
if (context == null) {
return;
}
Intent intent = new Intent();
//获取当前apk包URI,并设置到intent中(这一步设置,可让“未知应用权限设置界面”只显示当前应用的设置项)
Uri packageURI = Uri.parse("package:" + context.getPackageName());
intent.setData(packageURI);
//设置不同版本跳转未知应用的动作
if (Build.VERSION.SDK_INT >= 26) {
//intent = new Intent(android.provider.Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,packageURI);
intent.setAction(android.provider.Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
} else {
intent.setAction(android.provider.Settings.ACTION_SECURITY_SETTINGS);
}
context.startActivity(intent);
Toast.makeText(context, "请打开未知应用安装权限", Toast.LENGTH_SHORT).show();
}