最近在开发系统应用,需要在8.0设备上实现静默安装和静默卸载功能,百度了无数次,最后看到一篇文章实现了功能

参考链接 https://blog.csdn.net/qhs1573/article/details/81030567

直接上代码

/** * app安装和卸载类 * 静默安装所需权限 *      *      * 静默卸载所需权限 *  *  */public class InstallUtil {    /**     * 正常安装     * @param file     * @param context     */    public static void installApk(Context context,File file) {        //更新包文件         Intent intent = new Intent();        intent.setAction(Intent.ACTION_VIEW);        if (Build.VERSION.SDK_INT >= 24)        { // Android7.0及以上版本 Log.d("-->最新apk下载完毕","Android N及以上版本");            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);            intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);            Uri contentUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".fileProvider", file);    //参数二:应用包名+".fileProvider"(和步骤二中的Manifest文件中的provider节点下的authorities对应)            intent.setDataAndType(contentUri, "application/vnd.android.package-archive");        } else {        // Android7.0以下版本 Log.d("-->最新apk下载完毕","Android N以下版本");            intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        }        context.startActivity(intent);    }    /**     * 静默安装     * @param apkPath     * @return     */    public static boolean installClientApp(String apkPath) {        Process process = null;        BufferedReader successResult = null;        BufferedReader errorResult = null;        StringBuilder successMsg = new StringBuilder();        StringBuilder errorMsg = new StringBuilder();        try {//            //7.0以前版本使用//            process = new ProcessBuilder("pm", "install", "-r", apkPath).start();            //7.0以后版本使用            process = new ProcessBuilder("pm", "install","-i",BuildConfig.APPLICATION_ID, "-r", apkPath).start();            successResult = new BufferedReader(new InputStreamReader(process.getInputStream()));            errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream()));            String s;            while ((s = successResult.readLine()) != null) {                successMsg.append(s);            }            while ((s = errorResult.readLine()) != null) {                errorMsg.append(s);            }        } catch (Exception e) {        } finally {            try {                if (successResult != null) {                    successResult.close();                }                if (errorResult != null) {                    errorResult.close();                }            } catch (Exception e) {            }            if (process != null) {                process.destroy();            }        }        Log.e("result",""+errorMsg.toString()+",successMsg="+successMsg);//        Toast.makeText(context,"  "+successMsg , Toast.LENGTH_LONG).show();        //如果含有“success”单词则认为安装成功        return successMsg.toString().equalsIgnoreCase("success");    }    /**     * 静默卸载     * @param context     * @param pkg     */    public static void unInstall(Context context,String pkg){        Intent intent = new Intent();        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        PendingIntent sender = PendingIntent.getActivity(context, 0, intent, 0);        PackageInstaller mPackageInstaller = context.getPackageManager().getPackageInstaller();        mPackageInstaller.uninstall(pkg, sender.getIntentSender());// 卸载APK    }}

静默安装方法中,下面这行代码是关键

//            //7.0以前版本使用//            process = new ProcessBuilder("pm", "install", "-r", apkPath).start();            //7.0以后版本使用            process = new ProcessBuilder("pm", "install","-i",BuildConfig.APPLICATION_ID, "-r", apkPath).start();

 

 

 

 

 

更多相关文章

  1. Android(安卓)SDK 下载安装及配置
  2. Android(安卓)Studio报错--记一次学习官方Room教程时踩的各种坑
  3. Android编译环境的搭建
  4. 环境搭建
  5. Android(安卓)SDK安装无法识别jdk(JAVA_HOME)的核心原因【尼玛一
  6. js判断移动端是否安装某款app的多种方法
  7. cocos2d-x 编译到android studio的坑
  8. nexus 7(一代)上android和ubuntu多系统启动(包括ubuntu touch和u
  9. Android开发入门之--Eclipse/Android配置

随机推荐

  1. android-apt切换为官方annotationProcess
  2. 跟踪Android(安卓)callback 调用堆栈
  3. [置顶] Android Studio 1.4带来的福利
  4. [置顶] 我的Android进阶之旅------>Andro
  5. zz:Android 测试工具Monkey & Monkeyrunn
  6. Android开发_地图应用_百度Map-1
  7. Android(安卓)studio 混淆打包安装后报错
  8. android安装及卸载apk
  9. Android中自定义下拉样式Spinner
  10. android--相机开发