Android - 7.0權(quán)限適配

老婆保佑,代碼無BUG

目錄

  • FileUriExposedException
  • 使用FileProvider
    • 在manifest清單文件中注冊(cè)provider
    • 第二步:指定共享的目錄
    • file_paths
    • 使用
  • 參考

前言

剛剛說完6.0 沮趣,繼續(xù)說說7.0钾挟,只能說,權(quán)限越來越嚴(yán)格莺琳,現(xiàn)在的7.0 手機(jī)越來越多咯还棱,從Android6.0引入的動(dòng)態(tài)權(quán)限控制(Runtime Permissions)到Android7.0的“私有目錄被限制訪問”,都是淚

FileUriExposedException

為啥要做7.0 適配啊 惭等,為啥珍手,不做就給你來個(gè)這個(gè)錯(cuò)誤,哈哈

觸發(fā)原因

在Android7.0中嘗試傳遞 file:// URI 會(huì)觸發(fā) FileUriExposedException辞做。

換句話說琳要,只要我們用到URI 的地方,恭喜秤茅,全部FileUriExposedException稚补,

使用FileProvider

第一步:在manifest清單文件中注冊(cè)provider

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

說明

  1. exported:要求必須為false,為true則會(huì)報(bào)安全異常
  2. grantUriPermissions:true框喳,表示授予 URI 臨時(shí)訪問權(quán)限课幕。
  3. com.allens.test就是程序的包名
 android:authorities="com.allens.test.provider"

第二步:指定共享的目錄

為了指定共享的目錄我們需要在資源(res)目錄下創(chuàng)建一個(gè)xml目錄,然后創(chuàng)建一個(gè)名為file_paths(名字可以隨便起五垮,只要和在manifest注冊(cè)的provider所引用的resource保持一致即可)的資源文件

image

file_paths

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!--path:需要臨時(shí)授權(quán)訪問的路徑(.代表在相機(jī)調(diào)用時(shí)候訪問的是所有路徑乍惊,而文件寫入時(shí)訪問的路徑是Android/data/com.ijuyin.prints.news/)-->
    <!--name: 是你為設(shè)置的這個(gè)訪問路徑起的名字-->
    <paths>
        <external-path
            name="camera_photos"
            path="." />
        <external-path
            name="files_root"
            path="Android/data/com.ijuyin.prints.news/" />
        <external-path
            name="external_storage_root"
            path="." />
    </paths>
</resources>

使用

所有以前使用URI的地方 例如 imageUri = Uri.fromFile(mTmpFile);
全部改成下面的代碼

 Uri imageUri;
//判斷是否是7.0以上的設(shè)備
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
      //通過FileProvider創(chuàng)建一個(gè)content類型的Uri
     imageUri = FileProvider.getUriForFile(getActivity(), getActivity().getPackageName() + ".provider", mTmpFile);
      //添加這一句表示對(duì)目標(biāo)應(yīng)用臨時(shí)授權(quán)該Uri所代表的文件
     intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
 }else{
      // 還用以前的就好了
      imageUri = Uri.fromFile(mTmpFile);
 }
 
 intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);//設(shè)置Action為拍照
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);//將拍取的照片保存到指定URI
startActivityForResult(intent, REQUEST_CAMERA);

參考

Android7.0適配教程,心得

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末放仗,一起剝皮案震驚了整個(gè)濱河市润绎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖莉撇,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呢蛤,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡稼钩,警方通過查閱死者的電腦和手機(jī)顾稀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坝撑,“玉大人静秆,你說我怎么就攤上這事⊙怖睿” “怎么了抚笔?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)侨拦。 經(jīng)常有香客問我殊橙,道長(zhǎng),這世上最難降的妖魔是什么狱从? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任膨蛮,我火速辦了婚禮,結(jié)果婚禮上季研,老公的妹妹穿的比我還像新娘敞葛。我一直安慰自己,他們只是感情好与涡,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布惹谐。 她就那樣靜靜地躺著,像睡著了一般驼卖。 火紅的嫁衣襯著肌膚如雪氨肌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天酌畜,我揣著相機(jī)與錄音怎囚,去河邊找鬼。 笑死桥胞,一個(gè)胖子當(dāng)著我的面吹牛恳守,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播埠戳,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼井誉,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蕉扮!你這毒婦竟也來了整胃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤喳钟,失蹤者是張志新(化名)和其女友劉穎屁使,沒想到半個(gè)月后在岂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蛮寂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年蔽午,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酬蹋。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡及老,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出范抓,到底是詐尸還是另有隱情骄恶,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布匕垫,位于F島的核電站僧鲁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏象泵。R本人自食惡果不足惜寞秃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望偶惠。 院中可真熱鬧春寿,春花似錦、人聲如沸洲鸠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扒腕。三九已至绢淀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瘾腰,已是汗流浹背皆的。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蹋盆,地道東北人费薄。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像栖雾,于是被迫代替她去往敵國和親楞抡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容