阅读背景:

Android踩过的坑

来源:互联网 

一、版本升级

// 8.0以上系统调用安装应用
public void startInstallApk(String apkName) {
    if (Build.VERSION.SDK_INT >= 26) {
        boolean hasInstallPermission = getPackageManager().canRequestPackageInstalls();
        if (!hasInstallPermission) {
            //注意这个是8.0新API
            Uri packageURI = Uri.parse("package:" + getPackageName());
            Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI);
            startActivityForResult(intent, 10025);
        }
        else {
            installApk(apkName);
        }
    }
    else {
        installApk(apkName);
    }
}

// 8.0以下系统安装应用
public void installApk(String apkName) {
    FileUtils mFileUtils = new FileUtils();
    Uri mUri;
    Intent intent = new Intent();
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.setAction(Intent.ACTION_VIEW);
    //7.0系统开始认为直接使用本地Uri是不安全的 所以以FileProvider共享给外部提高安全性
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        mUri = FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + BuildConfig.ProviderSuffix, mFileUtils.getApksFile(apkName));
    } else {
        mUri = Uri.fromFile(mFileUtils.getApksFile(shortCutName));
    }
    //添加这一句表示对目标应用临时授权该Uri所代表的文件
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    intent.setDataAndType(mUri,
            "application/vnd.android.package-archive");
    startActivity(intent);
}// 8.0以上系统调用安装应用
public void start



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: