直接在我的应用上拍照时,我在app目录中保存照片时遇到问题(例如whatsapp示例)。
在我的清单中,我设置了这些许可证:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.myapp.fileprovider"
android:exported="false"
android:grantUriPermissions="true"
android:readPermission="com.myapp.READ">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"/>
</provider>
</application>
在我的活动中,我有:
public void showCamera(View v){
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
if (intent.resolveActivity(getPackageManager()) != null) {
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
}
if (photoFile != null) {
Uri photoURI = FileProvider.getUriForFile(this,
"com.myapp.fileprovider",
photoFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(intent, REQUEST_TAKE_PHOTO);
galleryAddPic();
}
}
}
String mCurrentPhotoPath;
private void galleryAddPic() {
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
File f = new File(mCurrentPhotoPath);
Uri contentUri = Uri.fromFile(f);
mediaScanIntent.setData(contentUri);
this.sendBroadcast(mediaScanIntent);
}
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;
}
在我的filePath资源中:
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="my_images" path="Android/data/com.myapp/files/Pictures" />
它打开相机,拍照并返回我的活动,但我无法在任何地方找到它,所以看起来不能保存照片。
答案 0 :(得分:1)
如果一切正常,则将galleryAddPic()方法放在onActivityResult中,在那里收集捕获的图片。
答案 1 :(得分:0)
我无法在任何地方找到它
你没有说明你是如何寻找它的。使用adb shell
可以查看文件系统级别的设备或模拟器上的内容。
目前,您的ACTION_MEDIA_SCANNER_SCAN_FILE
将无效,因为您使用的是无效路径。文件系统路径不以file:
开头。我建议完全删除mCurrentPhotoPath
并保留createImageFile()
返回的文件,将其与ACTION_MEDIA_SCANNER_SCAN_FILE
请求一起使用(或使用MediaScannerConnection.scanFile()
代替ACTION_MEDIA_SCANNER_SCAN_FILE
})。
另外,正如Hardik所说,你过早地打电话给galleryAddPic()
。等到galleryAddPic()
中调用onActivityResult()
,然后等待拍摄照片。虽然文件应该在您现在调用galleryAddPic()
时存在,但它将没有正确的详细信息(例如,文件大小)。这可能会使用户感到困惑。你最好等到画面准备好,然后要求将它编入索引。