Android8.0 安装apk

https://blog.csdn.net/m18860232520/article/details/78852832/

/**
 * 判断是否是8.0,8.0需要处理未知应用来源权限问题,否则直接安装
 */
private void checkIsAndroidO() {
    LogUtil.d("getPackageManager:"+filePath);
    if (Build.VERSION.SDK_INT >= 26) {
        boolean b = getPackageManager().canRequestPackageInstalls();
        LogUtil.d("getPackageManager:"+b);
        if (b) {
            installApk(DialogActivity.this,filePath);//安装应用
        } else {
            //请求安装未知应用来源的权限
            ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.REQUEST_INSTALL_PACKAGES}, 10010);
        }
    } else {
        installApk(DialogActivity.this,filePath);//安装应用
    }

}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    LogUtil.d("requestCode"+requestCode);
    switch (requestCode) {
        case 10010:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                installApk(DialogActivity.this,filePath);//安装应用
            } else {
                Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
                startActivityForResult(intent, 10012);
            }
            break;
    }
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case 10012:
            checkIsAndroidO();
            break;

        default:
            break;
    }
}
/**
 * 安装APK
 *
 * @param context
 * @param apkPath
 */
public static void installApk(Context context, String apkPath) {
    if (context == null || TextUtils.isEmpty(apkPath)) {
        return;
    }

    LogUtil.d("apkPath:"+apkPath);
    File file = new File(apkPath);
    Intent intent = new Intent(Intent.ACTION_VIEW);

    //判读版本是否在7.0以上
    if (Build.VERSION.SDK_INT >= 24) {
        //provider authorities
        Uri apkUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID+".provider", file);
        //Granting Temporary Permissions to a URI
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
    } else {
        intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
    }

    context.startActivity(intent);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值