电视TV开发之App应用内升级可以下载,执行权限了,相同包名还是无法安装

232 阅读1分钟

电视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();
}