我有一个相机项目,我正在使用this.CancelWork();
,尤其是来自此链接
https://github.com/googlesamples/android-Camera2Basic
我可以将拍摄的照片保存到位于camera2 API
的文件管理器,但是当我打开我的画廊时,它不会显示我的最后一张照片。
任何人都可以帮助我吗?
还有一个问题,我想让我的相机可以成为一个列表: 例如,当我打开“LINE”并且我想用相机拍照时,我希望我的相机出现并可以选择。
这是我尝试将图片保存到自定义路径的示例代码:
DCIM/camera
答案 0 :(得分:1)
Android媒体库可能无法在您编写文件时立即检测到您的文件,但仅在扫描后期才会检测到。要强制它进行扫描,您可以使用此代码
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Intent mediaScanIntent = new Intent(
Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
mediaScanIntent.setData(Uri.fromFile(mFile));
mContext.sendBroadcast(mediaScanIntent);
} else {
mContext.sendBroadcast(new Intent(
Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));
}
}
由于对每个添加的文件运行扫描是一项代价高昂的操作,因此您可以使用此解决方案手动添加它
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DATA, mFile);
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)
答案 1 :(得分:0)
如果要将单个文件添加到图库,请尝试使用:
MediaScannerConnection.scanFile(context,
new String[]{file.toString()}, null,
new MediaScannerConnection.OnScanCompletedListener()
{
public void onScanCompleted(String path, Uri uri)
{
Log.d("onScanCompleted", "Scanned " + path + " and uri " + uri);
}
});
答案 2 :(得分:0)
要在图库中显示图片,您需要在示例中添加ContentValues:https://github.com/googlesamples/android-Camera2Basic 找到了ImageReader.OnImageAvailableListener。这是我的代码:
private final ImageReader.OnImageAvailableListener mOnImageAvailableListener = new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
// First I get the path to gallery and crate new Album to my app
String pathD = Environment.getExternalStorageDirectory() + "/" + Environment.DIRECTORY_DCIM + "/";
File mediaStorageDir = new File(pathD, "MyAlbum");
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
Log.d("MyCameraApp", "failed to create directory");
}
}
/*Second I cut mFile = new File(getActivity().getExternalFilesDir(null), "pic.jpg");
from onActivityCreated and add here with the new path from my Album*/
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date());
mFile = new File(mediaStorageDir,"ImageName"+"_"+ timeStamp+".jpeg");
//Then the contentValues
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, "ImageName");
values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis());
values.put(MediaStore.Images.Media.ORIENTATION, ORIENTATIONS.get(rotation));
values.put(MediaStore.Images.Media.CONTENT_TYPE,"image/jpeg");
values.put("_data", mFile.getAbsolutePath());
ContentResolver cr = getActivity().getContentResolver();
cr.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
//This line is already in the code
mBackgroundHandler.post(new ImageSaver(reader.acquireNextImage(), mFile));
}
};