2017-05-19 15 views
0

カメラとギャラリー作物はandroid nougat 7でカメラを開くとアンドロイドnougat 7ではサポートされていません。このエラーメッセージが表示されています。Androidのカメラ作物はNougatでサポートしていません7

android.os.FileUriExposedException:

ファイル:アプリのためにClipData.Item.getUri(通過アプリ から露出///storage/emulated/0/file1495176310055.jpg)

+1

作物の問題ではありません。 Android 7のファイルアクセスシステムに変更がありました。他のアプリが提供したUris –

+0

を「ClipData.Item.getUri()によって公開されたものを使用できるようにするには、今からコンテンツプロバイダを実装する必要があります。可能。 – greenapps

+1

https://stackoverflow.com/questions/38200282/android-os-fileuriexposed-file-storage-emulated-0-test-txt-exposed – CommonsWare

答えて

2

Android 7.0をターゲットにすると、AndroidフレームワークはStrictMode APIポリシーを適用し、アプリ外のURIをfile://個公開することを禁止しています。ファイルURIを含むインテントがアプリを離れる場合、アプリはFileUriExposedException例外で失敗します。

アプリケーション間でファイルを共有するには、content:// URIを送信してURIに一時的なアクセス許可を与える必要があります。このアクセス許可を与える最も簡単な方法は、FileProviderクラスを使用することです。

あなたは私の解決策..

1.addのres/XML/provider_paths.xmlあなた3.in

provider_paths.xml 
    <?xml version="1.0" encoding="utf-8"?> 
    <paths xmlns:android="http://schemas.android.com/apk/res/android"> 
    <external-path name="images" path="."/> 
    </paths> 
タグ内にマニフェストに2.add

 <provider 
     android:name="android.support.v4.content.FileProvider" 
     android:authorities="android3.maxtingapp.provider" 
     android:exported="false" 
     android:grantUriPermissions="true"> 
     <meta-data 
      android:name="android.support.FILE_PROVIDER_PATHS" 
      android:resource="@xml/provider_paths"/> 
    </provider> 

を試すことができますアクティビティは、私のサンプルの下のような作物イメージを追加します。

private void cropImage(File file) { 
     final int width = 400; 
     final int height = 200; 

    try { 
    Intent cropIntent = new Intent("com.android.camera.action.CROP"); 

    Uri contentUri; 

     if(Build.VERSION.SDK_INT > M){ 

      contentUri = FileProvider.getUriForFile(AddPlace.this, 
            "android3.maxtingapp.provider", 
            file);//package.provider 

      //TODO: Permission.. 

      getApplicationContext().grantUriPermission("com.android.camera", 
                 contentUri, 
      Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); 

      cropIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
      cropIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 

     }else{ 

      contentUri = Uri.fromFile(file); 

     } 

     cropIntent.setDataAndType(contentUri, "image/*"); 
     cropIntent.putExtra("crop", "true"); 
     cropIntent.putExtra("aspectX", 2); 
     cropIntent.putExtra("aspectY", 1); 
     cropIntent.putExtra("outputX", width); 
     cropIntent.putExtra("outputY", height); 

     cropIntent.putExtra("return-data", true); 
     startActivityForResult(cropIntent, REQUEST_CROP_ICON); 

    }catch (ActivityNotFoundException a) { 
     Log.e("Activity Not Found",""+a.toString()); 
    } 
} 

私はこれがsomeone1のために役立つことを望みます..

関連する問題