私はアプリを作っています。写真を撮ってデータベースにデータを保存する必要がありますが、URIを取得しようとするとこのエラーが発生します写真から:getUriForFile()が含まれている構成済みルートを見つけることができません
java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/emulated/0/Android/data/br.com.xxxxx.fotoaula/files/Pictures/JPEG_20160915_161210_-695228406.jpg
ここに私のコードです
package br.com.xxxxx.fotoaula;
import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Environment;
import android.preference.PreferenceManager;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v4.content.FileProvider;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class PicturesActivity extends AppCompatActivity {
private static final String TAG = "PicturesActivity";
private static final int REQUEST_IMAGE_CAPTURE = 1;
private FloatingActionButton fabNewPicture;
private String mCurrentPhotoPath;
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pictures);
imageView = (ImageView)findViewById(R.id.imageView);
fabNewPicture = (FloatingActionButton)findViewById(R.id.fab_new_picture);
fabNewPicture.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
dispatchTakePictureIntent();
}
});
}
private File createImageFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
// Save a file: path for use with ACTION_VIEW intents
mCurrentPhotoPath = "file:" + image.getAbsolutePath();
return image;
}
private void dispatchTakePictureIntent()
{
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Ensure that there's a camera activity to handle the intent
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
// Create the File where the photo should go
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
Toast.makeText(getApplicationContext(), "Erro ao salvar imagem!", Toast.LENGTH_SHORT).show();
}
// Continue only if the File was successfully created
if (photoFile != null) {
Uri photoURI = FileProvider.getUriForFile(this,
"br.com.xxxxx.fotoaula.fileprovider",
photoFile);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
Toast.makeText(this, "Imagem capturada com sucesso, salvar dados no BD", Toast.LENGTH_SHORT).show();
}
}
}
マイプロバイダ:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="br.com.xxxxx.fotoaula.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"></meta-data>
</provider>
そして、私のfile_paths.xml
私はそれを正確に文書化しました。あなたが解決策を見つける手伝いをしてくれますか?
ありがとうございました!
'//ファイルが正常に作成された場合にのみ続行します。いいえ、すでにファイルを作成しないでください。ファイル名を作成してそのURLを取得してください。 – greenapps