美文网首页
Android 下载apk 自动 安装

Android 下载apk 自动 安装

作者: 乘风破浪的程序员 | 来源:发表于2018-03-28 18:52 被阅读341次

    Android N 后,由于不能访问私有路径,需要设置成共享文件

    
      /**
         * android N 执行此安装方法
         *
         * @param context 上下文
         * @param file    文件路径
         */
        public static void installAPK(Context context, File file) {
            // 获取下载好的 apk 路径
            Intent intentN = new Intent(Intent.ACTION_VIEW);
            // 由于没有在Activity环境下启动Activity,设置下面的标签
            intentN.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            //参数1 上下文, 参数2 Provider主机地址 和配置文件中保持一致   参数3  共享的文件
            Uri apkUri = FileProvider.getUriForFile(context, "world.letsgo.booster.android.FileProvider", file);
            //添加这一句表示对目标应用临时授权该Uri所代表的文件
            intentN.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intentN.setDataAndType(apkUri, "application/vnd.android.package-archive");
            context.startActivity(intentN);
        }
    
    
     /**
         * android  N  以下安装apk
         */
        public static void promptInstall(Context context, Uri date) {
            Intent promptInstall = new Intent(Intent.ACTION_VIEW)
                    .setDataAndType(date, "application/vnd.android.package-archive");
            // FLAG_ACTIVITY_NEW_TASK 可以保证安装成功时可以正常打开 app
            promptInstall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(promptInstall);
        }
    
    

    有可能系统下载功能被禁用,故需要判断该系统功能是否可用

    /**
         * 判断 系统下载功能是否可用
         *
         * @return true  可用 false 不可用
         */
        static boolean downLoadMangerIsEnable(Context context) {
            try {
                int state = context.getApplicationContext().getPackageManager()
                        .getApplicationEnabledSetting("com.android.providers.downloads");
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
                    return !(state == PackageManager.COMPONENT_ENABLED_STATE_DISABLED ||
                            state == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER
                            || state == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED);
                } else {
                    return !(state == PackageManager.COMPONENT_ENABLED_STATE_DISABLED ||
                            state == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER);
                }
            } catch (Exception e) {
                LoggerUtils.debugAndSave(e.getMessage());
            }
            return false;
        }
    
    
    
    
    
    
    
    
    
    
    
    
    

    相关文章

      网友评论

          本文标题:Android 下载apk 自动 安装

          本文链接:https://www.haomeiwen.com/subject/ezuucftx.html