解決 Android 7.x相機(jī)拍照?qǐng)?bào) Android.os.FileUriExposedException

解決 Android 7.x 報(bào)錯(cuò) Android.os.FileUriExposedException: file:///storage/emulated/0/test.txt exposed beyond app through Intent.getData()

過去在Android 7.x之前的手機(jī)調(diào)用拍照直接簡單的喚起系統(tǒng)相機(jī)

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

Uri uri = Uri.fromFile(sdcardTempFile);

intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);

但是Android N 文件系統(tǒng)權(quán)限的變化(Android N == Android 7.x)赶熟;

為了提高私有文件的安全性奴烙,在targetSdk版本為N或者以后版本的app中,其私有目錄將會(huì)限制訪問乏苦。這可以防止私有文件元數(shù)據(jù)的泄露畅形,比如文件大小或者是文件是否存在养距。但這給開發(fā)者帶來了很多不利的影響;

如果你的targetSdk版本為N日熬,恭喜你

解決方案:

--- 使用FileProvider 能完美解決 ---

1棍厌、在res資源目錄下新建一個(gè)xml文件夾


2、在xml目錄下新建一 file_paths.xml,然后打開xml文件添加如下代碼

<?xml version="1.0"encoding="utf-8"?>

<paths>?

? ? <external-path name="files_root" ?path="Android/data/${你的包名}/"/>

? ? <external-path name="external_storage_root" ?path="."/>

</paths>


3、在AndroidManifest.xml中添加如下代碼

<provider

? ? ? android:name="android.support.v4.content.FileProvider"

? ? ? android:authorities="${ 你的包名 }.fileProvider"

? ? ?android:exported="false"

? ? ?android:grantUriPermissions="true">

? ? ?<meta-data

? ? ? ? ? ?android:name="android.support.FILE_PROVIDER_PATHS"

? ? ? ? ? android:resource="@xml/file_paths"/>

</provider>


4耘纱、修改代碼適配Android N敬肚,由于Android N對(duì)權(quán)限管理嚴(yán)格,所以呢要做權(quán)限處理


如下代碼內(nèi)容 == 如上圖顯示:(由于沒有格式化功能束析,所以可以直接復(fù)制進(jìn)IDE 進(jìn)行格式化跳整)

public voidselectPicFromCamera() {

? ? ?if(!EaseCommonUtils.isExitsSdcard()) {

? ? ? ? ? ? showToast("SD卡不存在艳馒,不能拍照");

? ? ? ? ? ?return;

? ? ? }

? ? ?if(Build.VERSION.SDK_INT>=23) {

? ? ? ? ?int checkPermission = ContextCompat.checkSelfPermission(this, ? ? Manifest.permission.CAMERA); ?

? ? ? ? ?if(checkPermission != PackageManager.PERMISSION_GRANTED) { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CAMERA},222);

return;

?}else{ openCamera(); } }else{ openCamera(); } }


@Override

public voidonRequestPermissionsResult(intrequestCode, String[] permissions,int[] grantResults) {

? ?switch(requestCode) {

? ? ?//就像onActivityResult一樣這個(gè)地方就是判斷你是從哪來的。

? ? ?case 222:

? ? ? ? ? ? if(grantResults[0] == PackageManager.PERMISSION_GRANTED) {

? ? ? ? ? ? ? ? ? openCamera(); }else{ ?Toast.makeText(this,"很遺憾你把相機(jī)權(quán)限禁用了员寇。請(qǐng)務(wù)必開啟相機(jī)權(quán)限享受我們提供的服務(wù)吧弄慰。", Toast.LENGTH_SHORT).show(); }

? ? ? ?break;

? ? ? ?default:

? ? ? ?super.onRequestPermissionsResult(requestCode, permissions, grantResults);

? ? } }


//拍照

private voidopenCamera() {

? ?cameraFile=newFile(PathUtil.getInstance().getImagePath(), ? ? ? ? EMClient.getInstance().getCurrentUser() + System.currentTimeMillis() +".jpg");

? ?cameraFile.getParentFile().mkdirs();

? ?Intent intent =newIntent(MediaStore.ACTION_IMAGE_CAPTURE);

? ?//判斷是否是AndroidN以及更高的版本

? if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.N) {

? ? ? Uri contentUri = FileProvider.getUriForFile(mContext, BuildConfig.APPLICATION_ID+".fileProvider",cameraFile); ? ? ?intent.putExtra(MediaStore.EXTRA_OUTPUT, contentUri);

}else{ ?intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(cameraFile)); } ?startActivityForResult(intent, Constants.REQUEST_CODE.IMAGE_CAPTURE); }

private void showToast(String c){ Toast.makeText(this,c,Toast.LENGTH_SHORT).show(); ?}

親測(cè)試完美解決

方法二:使用ContentProvider方式傳遞uri,

參考:http://blog.csdn.net/honjane/article/details/52057132

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蝶锋,一起剝皮案震驚了整個(gè)濱河市陆爽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扳缕,老刑警劉巖慌闭,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異第献,居然都是意外死亡贡必,警方通過查閱死者的電腦和手機(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
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼储笑!你這毒婦竟也來了甜熔?” 一聲冷哼從身側(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)容