最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

適配android7.0獲取文件的Uri的方法

 更新時(shí)間:2017年09月13日 09:07:12   作者:珠穆朗瑪小王子  
本篇文章主要介紹了適配android7.0獲取文件的Uri的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

前言#

Android 7.0已經(jīng)發(fā)布很久了,雖然市場(chǎng)份額還不是很高,但是流行起來(lái)都是早晚的事,所以適配Android 7.0刻不容緩。

Android 7.0 對(duì)系統(tǒng)進(jìn)行了很多的優(yōu)化:例如文件訪(fǎng)問(wèn)權(quán)限,省電,網(wǎng)絡(luò),后臺(tái)等等,其中最突出的就是應(yīng)用外的Uri訪(fǎng)問(wèn)。

什么時(shí)候會(huì)用到Uri的應(yīng)用外訪(fǎng)問(wèn)呢?舉一個(gè)簡(jiǎn)單的例子,下載apk更新,這個(gè)時(shí)候會(huì)調(diào)用系統(tǒng)功能來(lái)安裝這個(gè)apk,這就是應(yīng)用外訪(fǎng)問(wèn)文件,需要傳入文件的Uri。

但是這樣可能會(huì)顯得不太安全,萬(wàn)一是什么非常重要的文件就糟糕了,所以Android 7.0對(duì)應(yīng)用外訪(fǎng)問(wèn)的Uri要進(jìn)行處理加密。

正文#

那應(yīng)該怎么處理這個(gè)問(wèn)題呢?首先我們需要注冊(cè)ContentProvider,這個(gè)就很熟悉了,他可以把數(shù)據(jù)庫(kù)的內(nèi)容分享給其他應(yīng)用,現(xiàn)在是為了分享文件:

//res目錄下創(chuàng)建xml,設(shè)置要分享的目錄,名稱(chēng)定義file_paths
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="myFile" path ="" />
</paths>

// 注冊(cè)provider
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.lzp.fileprovider"
android:exported="false"
// 賦予Uri權(quán)限
android:grantUriPermissions="true">

<meta-data
  android:name="android.support.FILE_PROVIDER_PATHS"
  // 設(shè)置要分享的路徑
  android:resource="@xml/file_paths"/>
</provider>

設(shè)置分享的路徑有三種:

  • <files-path/>代表的根目錄: Context.getFilesDir()
  • <external-path/>代表的根目錄:Environment.getExternalStorageDirectory()
  • <cache-path/>代表的根目錄: getCacheDir()

provider注冊(cè)完了之后,就需要稍微修改一下我們的java代碼:

Intent i = new Intent(Intent.ACTION_VIEW);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// 判斷是否是7.0
if(Build.VERSION.SDK_INT >= 24){
  // 適配android7.0 ,不能直接訪(fǎng)問(wèn)原路徑
  // 需要對(duì)intent 授權(quán)
  i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
  i.setDataAndType(FileProvider.getUriForFile(context, context.getPackageName() + ".fileProvider",new File(filePath)),"application/vnd.android.package-archive");
}
else{
  i.setDataAndType(Uri.fromFile(new File(filePath)), "application/vnd.android.package-archive");
}
context.startActivity(i);

在java代碼中,我們先判斷了當(dāng)前的手機(jī)的系統(tǒng)版本,如果是7.0以下就使用之前的Uri,如果是7.0以上,開(kāi)始通過(guò)Provider來(lái)獲取加密后的Uri。

最終得到的Uri的格式:

content://com.lzp.fileprovider/myFile/xxxxx.apk

看來(lái)主要是把分享出去的路徑進(jìn)行了加密,不能直接看到文件的完整路徑。

總結(jié)#

ok,解決這個(gè)問(wèn)題就是這么簡(jiǎn)單,如果是應(yīng)用內(nèi)訪(fǎng)問(wèn)文件是不受影響的,例如我們的讀取圖片之類(lèi)的操作,由于時(shí)間比較緊,寫(xiě)的就比較簡(jiǎn)單了,之后再寫(xiě)點(diǎn)稍微高逼格一點(diǎn)的東西。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 上傳Android項(xiàng)目至github的解析

    上傳Android項(xiàng)目至github的解析

    本文主要講解了如何將自己的android項(xiàng)目上傳至github,相信大家平時(shí)在開(kāi)發(fā)過(guò)程中為了避免重復(fù)造輪子會(huì)經(jīng)常逛一下github查看有沒(méi)有與需求類(lèi)似的開(kāi)源項(xiàng)目,那么github上面的開(kāi)源項(xiàng)目是如何上傳至github上的呢?
    2018-05-05
  • Android日期選擇器對(duì)話(huà)框DatePickerDialog使用詳解

    Android日期選擇器對(duì)話(huà)框DatePickerDialog使用詳解

    這篇文章主要為大家詳細(xì)介紹了Android日期選擇器對(duì)話(huà)框DatePickerDialog的使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Android仿微信拍攝短視頻

    Android仿微信拍攝短視頻

    本文主要對(duì)Android仿微信拍攝短視頻的實(shí)現(xiàn)方法進(jìn)行介紹,其功能設(shè)置為類(lèi)似于微信,點(diǎn)擊開(kāi)始拍攝,設(shè)置最長(zhǎng)拍攝時(shí)間。具有很好的參考價(jià)值,需要的朋友一起來(lái)看下吧
    2016-12-12
  • Android中ExpandableListView使用示例詳解

    Android中ExpandableListView使用示例詳解

    這篇文章主要為大家詳細(xì)介紹了Android中ExpandableListView使用示例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Android中RecyclerView布局代替GridView實(shí)現(xiàn)類(lèi)似支付寶的界面

    Android中RecyclerView布局代替GridView實(shí)現(xiàn)類(lèi)似支付寶的界面

    RecyclerView比GridView來(lái)得更加強(qiáng)大,不僅是在分割線(xiàn)的繪制方面,在條目的編輯上也做得同樣出色,下面就來(lái)看一下Android中RecyclerView布局代替GridView實(shí)現(xiàn)類(lèi)似支付寶的界面的實(shí)例
    2016-06-06
  • Android使用ImageView實(shí)現(xiàn)支持手勢(shì)縮放效果

    Android使用ImageView實(shí)現(xiàn)支持手勢(shì)縮放效果

    這篇文章主要介紹了Android使用ImageView實(shí)現(xiàn)支持手勢(shì)縮放效果,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • Android支付寶支付設(shè)計(jì)開(kāi)發(fā)

    Android支付寶支付設(shè)計(jì)開(kāi)發(fā)

    這篇文章主要為大家詳細(xì)介紹了Android支付寶支付設(shè)計(jì)開(kāi)發(fā),設(shè)計(jì)支付寶支付開(kāi)發(fā)方案,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Flutter實(shí)現(xiàn)打印功能的示例詳解

    Flutter實(shí)現(xiàn)打印功能的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何通過(guò)?Flutter?實(shí)現(xiàn)調(diào)用打印機(jī)打印的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • AndroidQ(10)黑暗模式適配的實(shí)現(xiàn)

    AndroidQ(10)黑暗模式適配的實(shí)現(xiàn)

    這篇文章主要介紹了AndroidQ(10)黑暗模式適配的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Android自定義控件實(shí)現(xiàn)邊緣凹凸的卡劵效果

    Android自定義控件實(shí)現(xiàn)邊緣凹凸的卡劵效果

    這篇文章主要介紹了Android自定義控件實(shí)現(xiàn)邊緣凹凸的卡劵效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-07-07

最新評(píng)論

饶河县| 得荣县| 汕尾市| 中牟县| 德格县| 红桥区| 奉化市| 静乐县| 长兴县| 黄山市| 云阳县| 丰城市| 高阳县| 柳河县| 正宁县| 固安县| 龙胜| 富裕县| 扶风县| 观塘区| 麻城市| 乐陵市| 云梦县| 灵璧县| 江阴市| 云和县| 和龙市| 菏泽市| 成安县| 鹤山市| 新巴尔虎右旗| 大同市| 彭水| 河池市| 图们市| 阿坝县| 东台市| 潮州市| 三明市| 昭平县| 朔州市|