• Android7.0 应用内升级


    Android7.0应用内升级

    最近线上项目在7.0机器上出现应用内升级失败,原来是由于Android7.0权限问题导致。

    如果项目的 targetSdkVersion>=24 在处理应用内升级的时候需要兼容7.0。

    1、创建file_paths.xml文件

      在res下创建xml文件夹,然后在xml文件夹下创建file_paths.xml文件。

      

    1 <?xml version="1.0" encoding="utf-8"?>
    2 <resources xmlns:android="http://schemas.android.com/apk/res/android">
    3     <paths>
    4         <external-path
    5             name="download"
    6             path=""/>
    7     </paths>
    8 </resources>

    说明:apk是下载在Environment.getExternalStorageDirectory()路径下的。

       external-path代表 Environment.getExternalStorageDirectory()目录。

       name:必须有。为Environment.getExternalStorageDirectory()的别名

       path:可以为空。空代表Environment.getExternalStorageDirectory()目录下所有的文件夹和文件。

    2、配置AndroidManifest.xml文件添加provider标签

     1         <provider
     2             android:name="android.support.v4.content.FileProvider"
     3             android:authorities="com.ntjr.std.provider"
     4             android:exported="false"
     5             android:grantUriPermissions="true"
     6             >
     7             <meta-data
     8                 android:name="android.support.FILE_PROVIDER_PATHS"
     9                 android:resource="@xml/file_paths"/>
    10         </provider>

    3、安装apk的方法进行版本判断:

      

     1     public void installApk(Context context, File file) {
     2         if (!file.exists()) {
     3             ToastUtil.show(mContext, "安装失败");
     4             return;
     5         }
     6         Intent intent = new Intent();
     7         intent.setAction(android.content.Intent.ACTION_VIEW);

          //版本>=24
    8 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
           
          //参数说明:
           
    context:上下文
           authority:必须和provider中声明的android:authorities值一致
    file:所下载的apk文件
     9             Uri contentUri = FileProvider.getUriForFile(context, "com.ntjr.std.provider", file);
    10             intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
    11             intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    12             intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
    13         } else {
    14             Uri uri = Uri.fromFile(file);
    15             intent.setDataAndType(uri, "application/vnd.android.package-archive");
    16         }
    17         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    18         context.startActivity(intent);
    19     }

    要注意使用的是 addFlags还是setFlags。setFlags会清除掉上面所设置的flag。

  • 相关阅读:
    miniSpartan6, another Spartan 6 Kit
    XuLA/XuLA2
    Papilio Pro Boards
    STM32 Hardware Development
    Configuring spartan 6 using mcu and spi flash
    STM32 IO口双向问题
    [Projet] Module NFC
    Spartan-6 FPGA Configuration
    TRF7970A IC Communication Interface
    电动门/汽车遥控器拷贝机
  • 原文地址:https://www.cnblogs.com/zhaobingqing/p/6951439.html
Copyright © 2020-2023  润新知