1. 程式人生 > >Andoid 7.0呼叫系統拍照的正確用法

Andoid 7.0呼叫系統拍照的正確用法

Android 7.0出來很久了,新特性中最重要的一條就是對檔案許可權進一步升級,提出了新的類FileProvider來獲取檔案。

首先FileProvider是ContentProvider的子類,把原來檔案共享的file://uri換成了content://uri。一個Uri允許你獲取臨時許可權去讀寫檔案,當使用含有Uri的Intent,可以使用Intent.setFlags來新增臨時許可權。

假如我現在要呼叫系統相機拍攝照片,那應該怎麼做呢

  • 在manifest中新增Provider
<manifest>
    ...
    <application>
        ...
<provider android:name="android.support.v4.content.FileProvider" android:authorities="com.mydomain.fileprovider" android:exported="false" android:grantUriPermissions="true"> ... </provider> ... </application> </manifest>
  • 配置你要獲取的檔案所在的資料夾–建立一個xml檔案,檔案內容如下:
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <files-path name="my_images" path="images/"/>
    ...
</paths>

路徑說明:

<files-path name="name" path="path/" />   等同於Context.getFilesDir()下面的path資料夾的所有檔案
<cache-path name="name"
path="path/" /> 等同於Context.getCacheDir()下面的path資料夾 <external-path name="name" path="path/" /> 等同於Environment.getExternalStorageDirectory()下面的path資料夾 <external-files-path name="name" path="path/" /> 等同於 Context#getExternalFilesDir(String)下面子檔案path資料夾 <external-cache-path name="name" path="path/" /> 相當於 Context.getExternalCacheDir()下邊的path資料夾
  • 新增路徑資訊到provier
<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="com.mydomain.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>

準備工作做完了現在可以去拍照了

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File mImageFile = new File(imageDir, UUID.randomUUID() + ".jpg");
Uri uri = FileProvider.getUriForFile(ReportActivity.this, "com.mydomain.fileprovider", mImageFile);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, REQUEST_CAMERA);

相關推薦

Andoid 7.0呼叫系統拍照正確用法

Android 7.0出來很久了,新特性中最重要的一條就是對檔案許可權進一步升級,提出了新的類FileProvider來獲取檔案。 首先FileProvider是ContentProvider的子

android7.0之前和7.0呼叫系統相機

在Android7.0上呼叫系統相機拍照,裁切照片 呼叫系統相機拍照 在Android7.0之前,如果你想呼叫系統相機拍照可以通過以下程式碼來進行: File file=new File(Envir

Android 7.0呼叫系統相機(檔案訪問crash android.os.FileUriExposedException)

最近專案中做圖片上傳的功能中遇到一個問題,就是7.0的手機上呼叫系統相機指定圖片路徑的情況下回crash,報錯android.os.FileUriExposedException uri暴露的錯誤。 Android7.0對應用共享檔案這塊做了一些強制性的要求。

Android 7.0呼叫相機拍照 報錯 FileUriExposedException

摘自郭霖 《第一行程式碼》 從Android 7.0系統開始,直接使用本地真實路徑的Uri,被認為是不安全的,會丟擲一個FileUriExposedException異常,,而FileProvider則是一種特殊的內容提供器,它使用了和內容提供器類似的機制來對

Android 7.0呼叫系統相機適配筆記

對於Android N以下,檔案直接Uri.fromFile(file)就可以直接使用,Audroid N 即編譯app的版本 compileSdkVersion 24時,此時會報出FileUriExposedException異常,解釋如下: 對於面向 Android

Android7.0呼叫系統拍照系統相簿(圖片壓縮、檢視原圖、許可權處理)

效果以及需求 檢視原圖可點選放大,可兩指放大等 1.PopupWindow的簡單使用 PopupWindow最基本的三個條件是一定要設定的:View contentView

呼叫系統相機拍照和選擇系統相簿-適配7.0以上系統

現在很多apk都有呼叫系統相機進行拍照和選擇系統相簿,GitHub和各大網站都有很多封裝的,這裡就不zb了! 直接上程式碼吧:拍照和選擇系統相簿都適配了7.0以上系統,程式碼都有註釋 “ private static final int TAKE_PHON

MVP模式的Android 呼叫系統拍照,相簿,剪裁,適配到7.0,修復拍照圖片旋轉問題

Android 呼叫系統拍照,相簿,剪裁,適配到7.0,修復拍照圖片旋轉問題 直接上程式碼 首先新增拍照需要的許可權 <uses-permission android:name="android.permission.CAMERA" />//相

Android 7.0以上系統獲取以content開頭的檔案拿不到正確路徑,報錯column-data-does-not-exist

我們專案的使用場景,手機qq開啟檔案,選擇其他開啟方式,選擇我們自己的應用開啟,通過intent.getData()獲取檔案地址,後來發現在Android7.0之後的版本,獲取到的地址不正確,說檔案不存在。日誌報錯column-data-does-not-exist, 經過一天的折騰,終於在網上

Android7.0呼叫系統相機拍照、訪問相簿問題。

關於Android7.0呼叫系統相機拍照、訪問相簿的一些問題: 在Android6.0中Google提出了動態申請許可權的Api,呼叫相機拍照,訪問SDcard等操作都需要先申請對應的許可權如下: <uses-permission android:name="and

Android7.0呼叫系統相機拍照、訪問相簿問題上傳到伺服器

//model層 package zhaochuang.bawei.com.myapplication.model; import java.util.Map; import okhttp3.RequestBody; import zhaochuang.bawei.com

創建RHEL-server-7.0操作系統

技術 位置 water fff log 創建虛擬機 選擇 -o 推薦 創建RHEL-server-7.0操作系統 1.雙擊進入VMware 2.點擊創建虛擬機 3.點擊自定義,然後點擊下一步 4.選擇12.0的版本,兼容性大。然後點擊下一步 5.選擇Linux(L).版本選

Android 7.0 呼叫相機 android.os.FileUriExposedException

import android.R.integer; import android.app.Activity; import android.app.Dialog; import android.content.ContentValues; import android.c

android7.0呼叫相機拍照的問題解決方案

最近在應用中開發呼叫系統相機拍照的時候,遇到一個問題,就是在安卓7.0及以上機型使用,按照往常寫法Uri.fromFile(imgFile)回丟擲異常FileUriExposedException導致程

PictureSelector 7.0及以上拍照或拍攝 出現的FileUriExposedException

因為本人專案中用到第三方庫圖片選擇器(PictureSelector),在選擇器中點選拍照或者拍攝遇到點選事件不響應,遇到FileUriExposedException異常,在百度搜索好久都沒有詳細的解決資料,我在這裡將解決辦法告訴大家,希望能幫助到你們! Andr

適配安卓(Android)7.0檔案系統

注: 安卓6.0是許可權管理的變更,要想使用危險許可權,必須程式碼中主動請求相關許可權;到了安卓7.0中,即使你主動請求了讀寫許可權,你不一定能夠讀取你想要的檔案,因為7.0的檔案系統加密了,使用方式和以前不同了,如果app不能即使的相容7.0的新特性,很可能

android 7.0 相機,拍照 調裁切提示 “無法載入此圖片” 解決方案

調起相機拍照之後,在調起裁切之前  加上 這兩句程式碼,,Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); //需要加上這

android 7.0呼叫相機許可權

Android 7.0之後呼叫相機的方式不允許以file://的方式呼叫,需要以共享檔案的方式content://url ContentValues contentValues = new ContentValues(1); contentValues.put(Medi

關於android中呼叫系統拍照,返回圖片是旋轉90度..

由於專案的需要,沒有自定義拍照功能,僅僅呼叫了系統的拍照程式..但是出現了一個問題,就是拍照完成顯示圖片居然是被旋轉的圖片....解決辦法:/** * 獲取圖片的旋轉角度,有些系統把拍照的圖片旋轉了,有的沒有旋轉 */ int degree

Android 例項講解新增本地圖片和呼叫系統拍照圖片

在專案的開發過程我們離不開圖片,而有時候需要呼叫本地的圖片,有時候需要呼叫拍照圖片。同時實現拍照的方法有兩種,一種是呼叫系統拍照功能,另一種是自定義拍照功能。而本博文目前只講解第一種方法,第二種方法後期在加以講解。 新增本地圖片和呼叫系統拍照圖片主要是通過呼叫acitivi