<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      FileProvider解決FileUriExposedException

      FileUriExposedException

      在給app做版本升級的時(shí)候,先從服務(wù)器下載新版本的apk文件到sdcard路徑,然后調(diào)用安裝apk的代碼,一般寫法如下:

      private void openAPK(String fileSavePath){
          File file=new File(fileSavePath);
          Intent intent = new Intent(Intent.ACTION_VIEW);
          Uri data = Uri.fromFile(file);
          intent.setDataAndType(data, "application/vnd.android.package-archive");
          startActivity(intent);
      }
      

      這樣的寫法在Android7.0版本之前是沒有任何問題,只要給一個(gè)apk文件路徑就能打開安裝。但是在Android7.0版本上會報(bào)錯(cuò):

       android.os.FileUriExposedException:
       file:///storage/emulated/0/Download/FileProvider.apk 
       exposed beyond app through Intent.getData()
      

      從Android 7.0開始,一個(gè)應(yīng)用提供自身文件給其它應(yīng)用使用時(shí),如果給出一個(gè)file://格式的URI的話,應(yīng)用會拋出FileUriExposedException。這是由于谷歌認(rèn)為目標(biāo)app可能不具有文件權(quán)限,會造成潛在的問題。所以讓這一行為快速失敗。

      FileProvider方式解決

      這是谷歌官方推薦的解決方案。即使用FileProvider來生成一個(gè)content://格式的URI。

      1.在Manifest.xml中聲明一個(gè)provider。

      <application ···>
              ···
          <provider
              android:name="android.support.v4.content.FileProvider"
              android:authorities="com.ansen.fileprovider.fileprovider"
              android:grantUriPermissions="true"
              android:exported="false">
              <meta-data
                  android:name="android.support.FILE_PROVIDER_PATHS"
                  android:resource="@xml/file_paths" />
          </provider>
      </application>
      

      android:name值是固定的,android:authorities隨便寫但是必須得保證唯一性,我這邊用的是包名+"fileprovider",android:grantUriPermission跟android:exported固定值。

      里面包含一個(gè)meta-data標(biāo)簽,這個(gè)標(biāo)簽的name屬性固定寫法,android:resource對應(yīng)的是一個(gè)xml文件。我們在res文件夾下新建一個(gè)xml文件夾,在xml文件夾下新建file_paths.xml文件。內(nèi)容如下:

      <?xml version="1.0" encoding="utf-8"?>
      <paths>
          <external-path name="name" path="Download"/>
      </paths>
      

      name表示生成URI時(shí)的別名,path是指相對路徑。

      paths標(biāo)簽下的子元素一共有以下幾種:

      files-path 對應(yīng)  Context.getFilesDir()
      cache-path 對應(yīng)  Context.getCacheDir()
      external-path 對應(yīng) Environment.getExternalStorageDirectory()
      external-files-path 對應(yīng)  Context.getExternalFilesDir()
      external-cache-path 對應(yīng)  Context.getExternalCacheDir()
      

      2.當(dāng)然我們還需要修改打開apk文件的代碼

      首先判斷下版本號,如果手機(jī)操作系統(tǒng)版本號大于等于7.0就通過FileProvider.getUriForFile方法生成一個(gè)Uri對象。

      private void openAPK(String fileSavePath){
          File file=new File(fileSavePath);
          Intent intent = new Intent(Intent.ACTION_VIEW);
          Uri data;
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//判斷版本大于等于7.0
              // "com.ansen.fileprovider.fileprovider"即是在清單文件中配置的authorities
              // 通過FileProvider創(chuàng)建一個(gè)content類型的Uri
              data = FileProvider.getUriForFile(this, "com.ansen.fileprovider.fileprovider", file);
              intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);// 給目標(biāo)應(yīng)用一個(gè)臨時(shí)授權(quán)
          } else {
              data = Uri.fromFile(file);
          }
          intent.setDataAndType(data, "application/vnd.android.package-archive");
          startActivity(intent);
      }
      

      源碼下載

      如果你想第一時(shí)間看我的后期文章,掃碼關(guān)注公眾號,每周不定期推送Android開發(fā)實(shí)戰(zhàn)教程文章...

            Android開發(fā)666 - 安卓開發(fā)技術(shù)分享
                   掃描二維碼加關(guān)注
      

      Android開發(fā)666

      posted @ 2017-09-07 10:56  安輝  閱讀(2394)  評論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 国产精品一二三区蜜臀av| 麻豆国产AV剧情偷闻女邻居内裤| 一区二区三区av天堂| 老子午夜精品无码| 五月丁香六月综合缴情在线| 女的被弄到高潮娇喘喷水视频| 国产三级精品福利久久| 人妻少妇久久中文字幕一区二区| 久久久久久久久毛片精品| 国产精品福利中文字幕| 妺妺窝人体色www婷婷| 久热天堂在线视频精品伊人| 国产丰满乱子伦无码专区 | 国产欧美日韩亚洲一区二区三区| 亚洲国产精品无码观看久久| 十八禁午夜福利免费网站| 仁布县| 中文字幕久无码免费久久| 高清无码爆乳潮喷在线观看| 元朗区| 男人猛躁进女人免费播放| 国产日产欧产精品精品| 国产一区二区不卡在线| 老师破女学生处特级毛ooo片| 97在线观看视频免费| 国产精品天干天干综合网| 免费无遮挡毛片中文字幕| 东京热人妻无码一区二区AV| 国产精品一区在线蜜臀| 色综合视频一区二区三区| 国产在线观看网址不卡一区| 九九热精品免费视频| 色综合久久综合久鬼色88| 亚洲国产欧美在线人成大黄瓜 | 午夜福利在线观看6080| 漾濞| 欧美激情一区二区| 在线国产毛片| 精品国产这么小也不放过| 国产国产成人精品久久蜜| 亚洲高潮喷水无码AV电影|