Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> 安卓7.0拍照遇到 Uri暴露異常

安卓7.0拍照遇到 Uri暴露異常

編輯:Android開發教程

安卓7.0拍照遇到 Uri暴露錯誤

最近,項目又做到,調用攝像頭拍照獲取圖片這個功能。

用以前的代碼直接用,發現在Android7.0上使用時會出現問題。

Android6.0之後,動態申請權限已成常態。

調用攝像頭拍照獲取圖片這個功能,需要動態申請 照相機權限、SD卡讀寫權限。

可是加了這些權限後,還是會報錯。

錯誤:android.os.FileUriExposedException: file:///storage/emulated.. exposed beyond app through Intent.getData()

這個是uri暴露錯誤。

從Android 7.0開始,一個應用提供自身文件給其它應用使用時,如果給出一個file://格式的URI的話,應用會拋出FileUriExposedException。這是由於谷歌認為目標app可能不具有文件權限,會造成潛在的問題。所以讓這一行為快速失敗。

網上有兩種解決方法:FileProvider方式 和 VmPolicy方式。

第一種是是谷歌官方推薦的解決方案,我這裡也是采用第一種方法。

步驟:1.在AndroidManifest.xml中添加如下代碼

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="">

    <application
        >
        
        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="${applicationId}.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths"/>
        </provider>

    </application>
</manifest>
View Code

        2.在res目錄下新建一個xml文件夾,並且新建一個provider_paths的xml文件

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <!--"."表示所有路徑-->
    <external-path name="external_files" path="."/>
</paths>
View Code

        3.使用到uri的代碼

Uri photoURI = Uri.fromFile(createImageFile());

變成:

Uri photoURI = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".provider", createImageFile());
View Code

修改代碼後,再次調試,程序正常運行。

 

ps:只是個小功能,網上也有不少資料,但還是自己總結一下比較好!

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved