Android7.0-8.0app更新

在做app时,你想上线就必须要做更新的接口

首先在做验证时你需要打包,把AS安装的卸载掉然后在安装打包的apk;

7.0,8.0都需要权限

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

在AndroidManifest中加入:

/*

注意:在有的手机上你做测试时会发现一直在

Uri apkUri = FileProvider.getUriForFile(Frag_Set_Set.this, BuildConfig.APPLICATION_ID+".provider", file);

这里一直卡住报错;有可能和我最开始的原因一样,在BuildConfig.APPLICATION_ID+".provider"及authorities="你的包名.provider"使用的是authorities="你的包名.fileprovider",把两个地方的fileprovider改成provider就可以了

*/
 

<provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="你的包名.provider"
            android:grantUriPermissions="true"
            android:exported="false"
            >
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

 怎么下载安装包就不说了,网上大把教材,我在下载好后安装更新这卡了半天!

7.0-8.0安装其实差不大多,只不过8.0,需要申请权限

 /**
     * 判断是否是8.0,8.0需要处理未知应用来源权限问题,否则直接安装
     */
    private void checkIsAndroidO(File file) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            boolean b = getPackageManager().canRequestPackageInstalls();
            if (b) {
                installApk(file);//安装应用的逻辑(写自己的就可以)
            } else {
                //请求安装未知应用来源的权限
                new ToastUtil().showToast(Frag_Set_Set.this,"请打开安装未知来源应用的权限,否则无法正常安装!",2000);
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.REQUEST_INSTALL_PACKAGES}, 0);
            }
        }else {
            installApk(file);
        }

    }
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case 0:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    installApk(file);
                } else {

                    //没有权限 在 yourAppPackageName 设置你的app包名
                    Uri packageURI = Uri.parse("package:" + getPackageName());
                    Logutil.w(tag,"-->"+packageURI);
                    Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI);
                    Frag_Set_Set.this.startActivityForResult(intent, 1);
                }
                break;

        }
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case 1:
                checkIsAndroidO(file);
                break;
            default:
                break;
        }
    }

 然后就是安装了:

/**
     * 安装apk
     */
    private void installApk(File file) {
        if (Build.VERSION.SDK_INT>=24){
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                boolean hasInstallPermission = getPackageManager().canRequestPackageInstalls();
                if (!hasInstallPermission) {
                    checkIsAndroidO(file);
                    return;
                }
//                intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
//                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            }
            Intent i = new Intent(Intent.ACTION_VIEW);
            i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            i.addFlags(Intent
        .FLAG_ACTIVITY_NEW_TASK);//打开一个线程,防止安装好后打开时闪退
            Uri apkUri = FileProvider.getUriForFile(Frag_Set_Set.this, BuildConfig.APPLICATION_ID+".provider", file);
            Logutil.w(tag,"-->"+BuildConfig.APPLICATION_ID+".provider");
            i.setDataAndType(apkUri, "application/vnd.android.package-archive");
            startActivity(i);
        }
        //7.0以下兼容
        else {
            try {
                Intent i = new Intent(Intent.ACTION_VIEW);
                i.setDataAndType(Uri.parse("file://" + file.toString()), "application/vnd.android.package-archive");
                startActivity(i);
            }catch (Exception e){
            }

        }
    }

 /*

注意:你在安装好后殿打开时出现闪退,是因为你需要开一个线程出来:i.addFlags(Intent .FLAG_ACTIVITY_NEW_TASK);

Android7.0,8.0更新app

*/

发布了19 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/xyzahaha/article/details/83413910