zoukankan      html  css  js  c++  java
  • Android 8.0+ 更新安装apk失败的问题

    最近做项目发现Android 8.0+ 更新安装apk时 出现安装失败的情况  总结原因是 缺少安装的权限

    Android 8.0 (Android O)为了针对一些流氓软件引导用户安装其他无关应用。在应用权限设置的“特殊访问权限”中,加入了“安装其他应用”的设置。

    简单的方法  可以直接在Manifest.xml中加入下面的权限:(亲测可用)

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

    另外当我们执行安装的代码后 都会加入杀死进程的代码 如下:

              if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                    uri = FileProvider.getUriForFile(this, "com.example.fileprovider",tempFile);
                       //此处为Uri临时授权
                    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                } else {
                    uri = Uri.fromFile(tempFile);
                }
    private void install(String apkPath) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    //Android 7.0+ 需要用FileProvider的方式访问隐私目录(比如相册)
    if (Environment.SYSTEM_VERSION_CODE >= Build.VERSION_CODES.N) {
    uri = FileProvider.getUriForFile(this, "com.example.fileprovider",tempFile);
    //此处为Uri临时授权
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    uri = Uri.fromFile(tempFile);
    }else{
    uri = Uri.fromFile(tempFile);
    }
    intent.setDataAndType(uri, "application/vnd.android.package-archive");
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);

    //最后杀死进程
    Handler mHandler=new Handler(context);
    mHandler.postDealy(new Runnable(){
    public void run(){
    //或者是 System.exit(0);
    android.Process.KillProcess((android.os.Process.myPid());

    }
    },500);//在这里延迟 500ms 是为了防止app使用FileProvider获取隐私文件时被杀死 导致安装失败

    }

  • 相关阅读:
    pydbg系列[1]
    内核参与方式
    Debugging with GDB阅读[6]
    宏技巧解读
    右键-发送到-邮件接收者没有了的解决方法
    获得文件版本信息
    解决动态生成的SQL中特殊字符的问题 QuotedStr function
    CreateFileMapping的MSDN翻译和使用心得
    关闭Windows自动播放功能
    清凉明目茶
  • 原文地址:https://www.cnblogs.com/bimingcong/p/10344479.html
Copyright © 2011-2022 走看看