上篇文章地址

Android 一个简单的App版本更新功能的实现,页面可自定义(一)

最近在完善一个之前做的版本更新的功能

Intent intent = new Intent();            intent.setAction(Intent.ACTION_VIEW);            intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");             intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);            mContext.startActivity(intent);

发现上述代码在7.0及以上的手机会出现问题,所以在这里做了兼容7.0,及8.0以上的安卓系统

使用 FileProvider 设置存储路径,可兼容7.0以上
  1. 在AndroidManifest中添加provider和权限
<application  ...>      <provider            android:name="android.support.v4.content.FileProvider"            android:authorities="(应用包名).fileProvider"            android:exported="false"            android:grantUriPermissions="true">            <meta-data                android:name="android.support.FILE_PROVIDER_PATHS"                android:resource="@xml/file_paths"/>        </provider></application><uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
  1. 在res下创建xml文件夹,接着在xml文件夹中传教file_paths.xml文件
<paths>    <external-path name="external_files" path="." /></paths>
  1. 同时兼容7.0以下和7.0
Intent intent = new Intent();            intent.setAction(Intent.ACTION_VIEW);            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {                // Android7.0及以上版本                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);                intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);                //Uri contentUri = FileProvider.getUriForFile(mContext, "应用包名" + ".fileProvider", file);//参数二:应用包名+".fileProvider"(和步骤一中的Manifest文件中的provider节点下的authorities对应)                 Uri contentUri = FileProvider.getUriForFile(mContext, mContext.getApplicationContext().getPackageName() + ".fileprovider", file);                intent.setDataAndType(contentUri, "application/vnd.android.package-archive");            } else {                // Android7.0以下版本                intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);            }            mContext.startActivity(intent);
兼容8.0以上
  1. 让用户允许安装权限,允许成功之后可版本更新
@RequiresApi(api = Build.VERSION_CODES.O)    private boolean isHasInstallPermissionWithO(Context context) {        if (context == null) {            return false;        }        return context.getPackageManager().canRequestPackageInstalls();    }    /**     * 开启设置安装未知来源应用权限界面     *     * @param context     */    @RequiresApi(api = Build.VERSION_CODES.O)    private void startInstallPermissionSettingActivity(Context context) {        if (context == null) {            return;        }        Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);        startActivityForResult(intent, REQUEST_CODE_APP_INSTALL);    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        if (resultCode == Activity.RESULT_OK) {            switch (requestCode) {                case REQUEST_CODE_APP_INSTALL:                    if (!StringUtils.isEmpty(url)) {                        //下载apk                        DownloadApk.getInstance().downLoadApk(MainActivity.this, url);                    }                    break;            }        }    }
  1. 适配8.0以上及8.0以下
//适配Android8.0以上      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {          boolean hasInstallPermission = isHasInstallPermissionWithO(MainActivity.this);          if (!hasInstallPermission) {              showRequestPermissionDialog();          } else {              //下载apk              DownloadApk.getInstance().downLoadApk(MainActivity.this, url);          }      } else {          //Android8.0以下          //下载apk          DownloadApk.getInstance().downLoadApk(MainActivity.this, url);      }private void showRequestPermissionDialog() {        CommonDialog requestPermission = new CommonDialog(this, "您还没有允许应用安装未知应用权限", "是否去允许", "是", "否",                new OnMyPositiveListener() {                    @Override                    public void onClick() {                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {                            //跳转页面判断允许安卓位置应用权限                            startInstallPermissionSettingActivity(MainActivity.this);                        }                    }                }, new OnMyNegativeListener() {            @Override            public void onClick() {                super.onClick();            }        });        requestPermission.show();    }

项目下载地址

添加链接描述

更多相关文章

  1. Android崩溃后重启
  2. Android开机广播和关机广播
  3. Android在WebView上构建Web应用程序
  4. Android(安卓)检测SD卡应用
  5. Android(安卓)横竖屏操作
  6. Android清除本地数据缓存代码
  7. [连载 1/15] Android(安卓)从入门到精通Example 之 TextBox
  8. Android(安卓)Shell命令dumpsys
  9. Android配置----Eclipse+BlueStacks调试Android应用

随机推荐

  1. android 实现序列化 浅析一
  2. android -- 小功能 手势操作GestureDetec
  3. Android 速度检测demo
  4. Android Liftcycle
  5. Android:可复制内容的TextView、EditText
  6. Android组件通信
  7. Android:SQLiteOpenHelper
  8. android仿微信UI设计
  9. 第15章、布局Layouts之TableLayout表格布
  10. Android 切换主题以及换肤的实现