Android 7.0 適配

轉(zhuǎn)載出處:http://blog.csdn.net/chay_chan

關(guān)于

最近在軟件的維護(hù)和更新過程中扁瓢,了解到一些關(guān)于Android7.0的適配,在這里和大家分享一下补君,據(jù)我所知引几,需要對(duì)Notification、拍照挽铁、圖片的裁剪進(jìn)行適配

Notification

關(guān)于 Android7.0 Notication 增加的特性伟桅,在此我就不詳細(xì)說明了硅堆,因?yàn)殛P(guān)于這類介紹的文章,早有一些大牛已經(jīng)發(fā)布過了贿讹。我主要講的是我在應(yīng)用更新功能中使用 Notification 踩到的坑」宦樱可以這么說民褂,應(yīng)用更新功能對(duì)于每個(gè)上線App都必不少,因?yàn)锳pp的需求或者功能疯潭,都是會(huì)在不斷的變化和完善的赊堪。
我遇到的情況是:在 Android7.0 以下,以下代碼是顯示下載App新版本成功后的通知欄竖哩,點(diǎn)擊可以跳轉(zhuǎn)到安裝App的頁面:



以上代碼哭廉,在 Android7.0 以下,可以實(shí)現(xiàn)點(diǎn)擊通知欄攔跳轉(zhuǎn)到安裝App界面的功能相叁,但是在安卓7.0或以上遵绰,點(diǎn)擊事件就出現(xiàn)問題了,點(diǎn)擊通知欄沒有任何反應(yīng)增淹,通知欄也不會(huì)顯示椿访,但是會(huì)有error等級(jí)的log輸出,出現(xiàn) FileUriExposedException 這樣的異常虑润,原因是 Andorid7.0 的“私有目錄被限制訪問”成玫,“StrictMode API 政策”。
由于從 Android7.0 開始拳喻,直接使用真實(shí)的路徑的Uri會(huì)被認(rèn)為是不安全的哭当,會(huì)拋出一個(gè) FileUriExposedException 這樣的異常。需要使用 FileProvider,選擇性地將封裝過的Uri共享到外部冗澈。于是钦勘,需要對(duì)上面的代碼進(jìn)行修改:



以上代碼增加了對(duì)系統(tǒng)版本的判斷,如果是 Andorid7.0 或以上渗柿,則不再使用 Uri.fromFile()方法 獲取文件的Uri个盆,而是通過使用 FileProvider(support.v4提供的類) 的getUriForFile()。同時(shí)要添加多這么一行代碼 installIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
由于 FileProvider 是繼承 ContentProvider,屬于四大組件之一朵栖,需要在AndroidManifest.xml中配置颊亮,配置如下:

配置中的 authorities 按照江湖規(guī)矩一般加上包名,${applicationId}是獲取當(dāng)前項(xiàng)目的包名,前提是 defaultConfig{} 閉包中要有applicationId屬性陨溅。



標(biāo)簽中的 resource 填寫配置 fileprovider 的配置文件终惑,在res資源目錄下新建xml文件下,在該文件夾下創(chuàng)建 file_provider_paths.xml文件门扇,這個(gè)xml文件名并不是一定要這么起雹有,只要和清單文件中配置的文件名一致就行偿渡。

file_provider_paths.xml 的內(nèi)容如下:

上述代碼中path="",是有特殊意義的霸奕,它代碼根目錄溜宽,也就是說你可以向其它的應(yīng)用共享根目錄及其子目錄下任何一個(gè)文件了,如果你將 path 設(shè)為 path=”pictures”质帅, 那么它代表著根目錄下的 pictures目錄(eg:/storage/emulated/0/pictures)适揉,如果你向其它應(yīng)用分享 pictures目錄 范圍之外的文件是不行的。
完成上述的代碼修改和 FileProvider 的配置后煤惩,就可以兼容 Android7.0 或以上系統(tǒng)了嫉嘀,點(diǎn)擊通知欄可以跳轉(zhuǎn)到安裝App的界面了。到此魄揉,關(guān)于 Notification 在 Android7.0 的兼容就完成了剪侮。

拍照

在 Andorid7.0 以下,以下代碼可以實(shí)現(xiàn)跳轉(zhuǎn)到拍照界面的功能洛退,拍完照會(huì)在對(duì)應(yīng)開啟拍照界面的 Activity 中的 onActivityResult()方法 中回調(diào):



但是在 Android7.0 或者以上瓣俯,以上代碼在調(diào)用拍照功能的時(shí)候,會(huì)導(dǎo)致應(yīng)用Crash,會(huì)報(bào) FileUriExposedException 異常,需要對(duì)以上代碼進(jìn)行修改不狮,對(duì)使用App的系統(tǒng)版本進(jìn)行判斷降铸,修改后代碼如下:



修改完成后,在 Android7.0 或以上的手機(jī)調(diào)用就可以調(diào)用拍照功能了摇零,拍照完后推掸,在 onActivityResult() 回調(diào)中,imgFile就是保存拍照后圖片的文件對(duì)象驻仅,就可以進(jìn)行相應(yīng)的處理谅畅,比如說對(duì)圖片進(jìn)行裁剪。

圖片的剪裁

在 Android7.0 以下噪服,以下代碼可以調(diào)用手機(jī)自帶的圖片裁剪功能:



但是在 Android7.0 或以上毡泻,以上代碼就需要進(jìn)行修改,修改如下:



getImageContentUri()方法 具體如下:

由于自己將發(fā)起裁剪請求的方法進(jìn)行封裝粘优,所以在 onActivityResult() 中仇味,拍照完成后,如果需要對(duì)圖片進(jìn)行裁剪雹顺,則可以這么操作:



ImageTools 的 decodeUriAsBitmap() 方法丹墨,是將Uri轉(zhuǎn)換為Bitmap對(duì)象,具體的代碼如下:

FileUtils.saveBitmapByQuality()方法嬉愧,是對(duì)圖片進(jìn)行壓縮贩挣,第一個(gè)參數(shù)傳入的是圖片的Bitmap對(duì)象,第二個(gè)參數(shù)是壓縮的保留率,比如上面使用的是80王财,即壓縮后為原來的80%卵迂,則是對(duì)其壓縮了20%,具體的代碼如下:

上述代碼可以實(shí)現(xiàn)和兼容 Android7.0 或以上系統(tǒng)的拍照+裁剪圖片的功能了绒净。在這里順便把調(diào)用相冊功能寫貼出來吧见咒,畢竟實(shí)際開發(fā)中需要上傳圖片的時(shí)候,通常會(huì)讓用戶選擇是拍照或者從相冊中獲取挂疆。

如果需要在選擇完相冊圖片后對(duì)圖片進(jìn)行裁剪论颅,則可以像上面拍照代碼那樣,需要在 onActivityResult() 回調(diào)中囱嫩,發(fā)起裁剪請求。這里一次性貼出 onActivityResult 的處理:

好了漏设,寫到這里墨闲,我的第一篇博客終于完成了,花了接近四個(gè)小時(shí)郑口,因?yàn)檫@是屬于技術(shù)性的博客鸳碧,文字要求嚴(yán)謹(jǐn),所以不像寫作文那樣信手拈來犬性。不過我盡量將文章寫得通俗易懂瞻离,希望可以幫助到更多的人,之前雖然在做項(xiàng)目的時(shí)候乒裆,有寫過不少筆記套利,但是從來沒有寫過博客,要是有哪些地方寫得不夠好鹤耍,還請各位大牛提出意見肉迫,彼此交流和學(xué)習(xí)。
我之所以萌發(fā)寫博客的念頭稿黄,也是因?yàn)樵陂_發(fā)過程中查詢問題的時(shí)候喊衫,無意間看到郭霖(人稱郭神)的博客,于是一篇篇的看了他的博客杆怕,也逐漸了解他族购,對(duì)他非常敬佩,昨天問了他寫博客對(duì)提升能力有沒有幫助陵珍,他也推薦我寫博客寝杖,所以今天我寫了第一篇博客,希望可以一直堅(jiān)持下去撑教,畢竟我對(duì)于安卓開發(fā)朝墩,一直都很熱衷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市收苏,隨后出現(xiàn)的幾起案子亿卤,更是在濱河造成了極大的恐慌,老刑警劉巖鹿霸,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件排吴,死亡現(xiàn)場離奇詭異,居然都是意外死亡懦鼠,警方通過查閱死者的電腦和手機(jī)钻哩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肛冶,“玉大人街氢,你說我怎么就攤上這事∧佬洌” “怎么了珊肃?”我有些...
    開封第一講書人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長馅笙。 經(jīng)常有香客問我伦乔,道長,這世上最難降的妖魔是什么董习? 我笑而不...
    開封第一講書人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任烈和,我火速辦了婚禮,結(jié)果婚禮上皿淋,老公的妹妹穿的比我還像新娘招刹。我一直安慰自己,他們只是感情好窝趣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開白布蔗喂。 她就那樣靜靜地躺著,像睡著了一般高帖。 火紅的嫁衣襯著肌膚如雪缰儿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,245評(píng)論 1 299
  • 那天散址,我揣著相機(jī)與錄音乖阵,去河邊找鬼。 笑死预麸,一個(gè)胖子當(dāng)著我的面吹牛瞪浸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吏祸,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼对蒲,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蹈矮,我...
    開封第一講書人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤砰逻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后泛鸟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蝠咆,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年北滥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了刚操。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡再芋,死狀恐怖菊霜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情济赎,我是刑警寧澤占卧,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站联喘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏辙纬。R本人自食惡果不足惜豁遭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贺拣。 院中可真熱鬧蓖谢,春花似錦、人聲如沸譬涡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涡匀。三九已至盯腌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間陨瘩,已是汗流浹背腕够。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留舌劳,地道東北人帚湘。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像甚淡,于是被迫代替她去往敵國和親大诸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

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