【发布时间】:2017-11-10 09:48:40
【问题描述】:
我尝试在我的应用中拍摄并保存照片。 我在清单中为他写了文件提供程序和路径:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="mypacage.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/path" />
</provider>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path name="my_images" path="images"/>
</paths>
在我的活动中,我调用片段对话框(cameraOrChoosePhoto Dialog),它有一个按钮,接下来是打开相机的意图和为照片创建文件的其他操作::
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.dialog_camera:
Uri uri = generateUriPhoto();
if(uri!=null) {
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
cameraIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION |
Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
getActivity().startActivityForResult(cameraIntent, SubItemDetail.CAMERA_RESULT);
} else dismiss();
break;
case R.id.dialog_choose_photo:
break;
}
}
private Uri generateUriPhoto() {
file = createNameFile();
uri = null;
if (file != null) {
String aut = getActivity().getPackageName()+".fileprovider";
uri = getUriForFile(getActivity(), aut, file);
getActivity().grantUriPermission(getActivity().getPackageName(), uri,
Intent.FLAG_GRANT_READ_URI_PERMISSION |
Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
}
return uri;
}
public File getFile() {
return file;
}
public Uri getUri() { // onActivityResult
return uri;
}
private File createNameFile() {
directory = new File(getActivity().getFilesDir(), "images");
if (!directory.exists()) {
directory.mkdirs();
}
String name = "photo_" + System.currentTimeMillis();
File file = null;
try {
file = File.createTempFile(
name, /* prefix */
".jpg", /* suffix */
directory /* directory */
);
} catch (IOException e) {
e.printStackTrace();
dismiss();
}
return file;
}
接下来我的活动:
…………
private Uri uri
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
CameraOrChoosePhotoDialog cameraOrChoosePhotoDialog = (CameraOrChoosePhotoDialog) getFragmentManager().findFragmentByTag("camera");
uri = cameraOrChoosePhotoDialog.getUri();// get uri from dialogfargment
if (resultCode == RESULT_OK) {
if (requestCode == CAMERA_RESULT) {
image.setImageURI(uri);
addPicToGallery(); // try to put photo in gallery
cameraOrChoosePhotoDialog.dismiss(); // close dialog
}
}
}
private void addPicToGallery() {
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,uri));
mediaScanIntent.setData(uri));
sendBroadcast(mediaScanIntent);
}
但照片没有出现在图库中
【问题讨论】:
-
我认为您需要在成功捕获后存储图像,您只是在扫描系统中存在的文件。首先尝试使用 fileOutputStream 压缩并保存位图,然后扫描(sendBroadcast)
-
@Demo 邮件。但在 Android Studio 的 AMD 中,我看到这些创建的文件扩展名为 .jpg。在文件夹 .../file/images/
-
你能打开那个图片吗??你能看到有效的图像吗??
-
是的,我可以。我将它与 URI 一起放入我的 ImageView 中。我可以将它复制到我的电脑中。
标签: android android-gallery android-fileprovider