Android程序静默安装安装后重新启动APP的方法

所属分类: 软件编程 / Android 阅读数: 90
收藏 0 赞 0 分享

 一:需求简介

  之前boss提出一个需求,运行在广告机上的app,需要完成自动升级的功能,广告机是非触摸屏的,不能通过手动点击,所以app必须做到自动下载,自动安装升级,并且安装完成后,app还要继续运行,最好不借助其它app来实现以上功能。

 二:实现思路

  实现这个功能第一个想到的方法就是静默安装,由于广告机已经root,静默安装比较顺利,安装app的主要代码如下:

/*
  @pararm apkPath 等待安装的app全路径,如:/sdcard/app/app.apk
**/
private static boolean clientInstall(String apkPath) {
    PrintWriter PrintWriter = null;
    Process process = null;
    try {
      process = Runtime.getRuntime().exec("su");
      PrintWriter = new PrintWriter(process.getOutputStream());
      PrintWriter.println("chmod 777 " + apkPath);
      PrintWriter
          .println("export LD_LIBRARY_PATH=/vendor/lib:/system/lib");
      PrintWriter.println("pm install -r " + apkPath);
      // PrintWriter.println("exit");
      PrintWriter.flush();
      PrintWriter.close();
      int value = process.waitFor();
      Logger.e("静默安装返回值:"+value);
      return returnResult(value);
    } catch (Exception e) {
      e.printStackTrace();
      Logger.e("安装apk出现异常");
    } finally {
      if (process != null) {
        process.destroy();
      }
    }
    return false;
  }

  以上方法能顺利安装,但不能实现软件安装完成后,软件还能继续运行,因为安装后,当前app的进程已经被kill了。无法实现boss提出的,安装后软件正常运行的需求,此时如果我们还想着用android来实现这个需求,是无法实现的,因为app进程被kill了,所以需要借助第三方来启动我们的app,我第一时间想到的就是linux执行am start命令,但这个命令不能立即执行,所以需要sleep来实现这个需求,命令格式如下 sleep 时间(单位秒),am start -n ,完整代码如下:

private void execLinuxCommand(){ 
    String cmd= "sleep 120; am start -n 包名/包名.第一个Activity的名称";
    //Runtime对象
    Runtime runtime = Runtime.getRuntime();
    try {
      Process localProcess = runtime.exec("su");
      OutputStream localOutputStream = localProcess.getOutputStream();
      DataOutputStream localDataOutputStream = new DataOutputStream(localOutputStream);
      localDataOutputStream.writeBytes(cmd);
      localDataOutputStream.flush();
      Logger.e("设备准备重启");
    } catch (IOException e) {
      Logger.i(TAG+"strLine:"+e.getMessage());
      e.printStackTrace();
    }
  }

   涉及到的权限:

<uses-permission android:name="android.permission.INSTALL_PACKAGES" />

   注意:不是所有root过的设备,都能执行Process localProcess = runtime.exec("su");这个需要硬件支持,这个坑我遇到过。通过以上两个方法就能实现静默安装,安装完成后,app自动需行的需求。

以上所述是小编给大家介绍的Android程序静默安装安装后重新启动APP的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

更多精彩内容其他人还在看

Android样式和主题之选择器的实例讲解

今天小编就为大家分享一篇关于Android样式和主题之选择器的实例讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

Android应用动态修改主题的方法示例

今天小编就为大家分享一篇关于Android应用动态修改主题的方法示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

Flutter 网络请求框架封装详解

这篇文章主要介绍了Flutter 网络请求框架封装详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Flutter倒计时/计时器的实现代码

这篇文章主要介绍了Flutter倒计时/计时器的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Android使用google breakpad捕获分析native cash

这篇文章主要介绍了Android使用google breakpad捕获分析native cash 的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

详解Flutter WebView与JS互相调用简易指南

这篇文章主要介绍了详解Flutter WebView与JS互相调用简易指南,分为JS调用Flutter和Flutter调用JS,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android开发实现ListView和adapter配合显示图片和文字列表功能示例

这篇文章主要介绍了Android开发实现ListView和adapter配合显示图片和文字列表功能,涉及Android使用ListView结合adapter适配器实现图文显示功能相关的布局、解析、权限控制等操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

Android文字基线Baseline算法的使用讲解

今天小编就为大家分享一篇关于Android文字基线Baseline算法的使用讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

Flutter自定义实现神奇动效的卡片切换视图的示例代码

这篇文章主要介绍了Flutter自定义实现神奇动效的卡片切换视图的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android实现自定义滑动刻度尺方法示例

这篇文章主要给大家介绍了关于Android实现自定义滑动刻度尺的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享
查看更多