私は解決策を見つけるために多くの時間を費やしました。getExternalStoragePublicDirectory() と getExternalFilesDir() などを試しました。しかし、onActivityResult は依然としてエラー resultCode をもたらします。fileProvider から Uri.fromFile() にのみ切り替えると機能します。しかし、Android のマニュアルでは、新しい API には FileProvider を使用することを強く推奨しています。私が間違っていることを教えてください。
マニフェスト フラグメント:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.mydomain.myapp.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"/>
</provider>
ファイルパス.xml
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="my_images" path="Android/data/com.mydomain.myapp/files/Pictures" />
<external-path name="pic" path="Pictures" /> </paths>
ジャワ
File photoFile;
public void buttonContentChanger(View view) {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
try{
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
if (!storageDir.exists()) storageDir.mkdir();
photoFile = File.createTempFile(imageFileName, ".jpg", storageDir);
} catch (Exception e) {}
if (photoFile != null) {
Uri photoURI = FileProvider.getUriForFile(this, "com.mydomain.myapp.fileprovider", photoFile);
// Uri photoURI1 = Uri.fromFile(photoFile); Working!!!!
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(takePictureIntent, 1);
}
}
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Bitmap bb = BitmapFactory.decodeFile("file:" + photoFile.getAbsolutePath(), null);
}