official docsに続き、私のアプリでカメラインテントを実行しました。 5.0以上のデバイスで動作しますが、Jellybeanでは動作しません。 012(JB)〜4.4(KK)のネイティブカメラアプリでは、撮影後に「残念ながらカメラが停止しました」と表示されます。私のアプリのonActivityResultでは、返される結果は常にRESULT.CANCELLEDです。私は間違って何をしていますか?Jellybeanでは、FileProviderを使用しているときにカメラインテントがRESULT.CANCELLEDを返します
P.S.私がfileproviderを使用せず、Uri.fromFile(file)を使用してuriを取得しないと、カメラインテントはJBで正しく動作します。続き
あなたは、URLの許可ごとに付与することによって、コードでそれをしなければならない私のコード
// MainActivity.java
File f = PhotoHelper.createImageFile(this);
photoPath = "file:" + f.getAbsolutePath();
Uri photoURI = FileProvider.getUriForFile(this, "com.myapp.fileprovider", f);
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(takePictureIntent, Constants.NEW_TOPIC_VIA_PHOTO);
// PhotoHelper.java
public static File createImageFile(Context context) throws IOException {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US).format(new Date());
String imageFileName = JPEG_FILE_PREFIX + timeStamp + "_";
File storageDir = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES);
return File.createTempFile(imageFileName, JPEG_FILE_SUFFIX, storageDir);
}
// AndroidManifest.xml
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.myapp.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"/>
</provider>
// file_paths.xml
<paths>
<external-path
name="App_Images"
path="Android/data/com.myapp/files/Pictures"/>
</paths>