当我从我的应用程序拍照时没有创建图像目录
Image directory not created when i take picture from my app
我在 android studio
工作。构建一个 app
并在其中使用相机。当我 运行 我的应用程序运行正常时。我捕捉图像它确实捕捉图像。但是我创建的文件夹没有显示在我的图库中。我将图像保存在 local storage
而不是 SD CARD
中。我很好奇为什么没有创建该文件夹,因为它没有给我任何错误,所以它应该在我的画廊中。所以我重新启动了我的设备,重新启动后我可以看到我的画廊中的文件夹和其中拍摄的图像。我再次打开应用程序并从中拍摄图像,但图像再次未显示在文件夹中。
下面是我的代码,我在其中创建了用于保存图像的 ta 目录
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE)
{
if(resultCode == Activity.RESULT_OK)
{
Bitmap bmp = (Bitmap)data.getExtras().get("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] byteArray = stream.toByteArray();
// convert byte array to Bitmap
Bitmap bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
if(isStoragePermissionGranted())
{
SaveImage(bitmap);
}
}
}
private void SaveImage(Bitmap finalBitmap) {
String root = Environment.getExternalStorageDirectory().getAbsolutePath().toString();
Log.v(LOG_TAG, root);
File myDir = new File(root + "/captured_images");
myDir.mkdirs();
Random generator = new Random();
int n = 1000;
n = generator.nextInt(n);
String fname = "Image-" + n + ".jpg";
File file = new File(myDir,fname);
if (file.exists())file.delete();
try {
FileOutputStream out = new FileOutputStream(file);
finalBitmap.compress(Bitmap.CompressFormat.JPEG,100,out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
下面是我调试的图片
**注:**
由于我使用的是原生相机,所以照片保存在相机胶卷文件夹中,即我设备中的默认文件夹。但是那里保存的图片不是压缩的,压缩图片应该保存在我创建的文件夹中。
卡住了,不知道怎么办。
非常感谢任何帮助。
试试这个
private void saveBitmap(Bitmap bitmap) {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = timeStamp + ".jpg";
File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
final String fileLoc = storageDir.getAbsolutePath() + "/folderName/" + imageFileName;
File file = new File(fileLoc);
OutputStream os = null;
try {
os = new BufferedOutputStream(new FileOutputStream(file));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, os);
try {`enter code here`
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
您需要调用 scanFile(Context context, String[] paths, String[] mimeTypes, MediaScannerConnection.OnScanCompletedListener callback) MediaScannerConnection[ 的方法=18=].
MediaScannerConnection 为应用程序提供了一种将新创建或下载的媒体文件传递到媒体扫描器服务的方法。这将使用新保存的媒体更新您的文件夹。
private void SaveImage(Bitmap finalBitmap) {
//....
if(!storageDir.exists()){
storageDir.mkdirs();
}
//...
file.createNewFile();
try {
MediaScannerConnection.scanFile(context, new String[] {file.getPath()} , new String[]{"image/*"}, null);
FileOutputStream out = new FileOutputStream(file);
finalBitmap.compress(Bitmap.CompressFormat.JPEG,100,out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
我在 android studio
工作。构建一个 app
并在其中使用相机。当我 运行 我的应用程序运行正常时。我捕捉图像它确实捕捉图像。但是我创建的文件夹没有显示在我的图库中。我将图像保存在 local storage
而不是 SD CARD
中。我很好奇为什么没有创建该文件夹,因为它没有给我任何错误,所以它应该在我的画廊中。所以我重新启动了我的设备,重新启动后我可以看到我的画廊中的文件夹和其中拍摄的图像。我再次打开应用程序并从中拍摄图像,但图像再次未显示在文件夹中。
下面是我的代码,我在其中创建了用于保存图像的 ta 目录
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE)
{
if(resultCode == Activity.RESULT_OK)
{
Bitmap bmp = (Bitmap)data.getExtras().get("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] byteArray = stream.toByteArray();
// convert byte array to Bitmap
Bitmap bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
if(isStoragePermissionGranted())
{
SaveImage(bitmap);
}
}
}
private void SaveImage(Bitmap finalBitmap) {
String root = Environment.getExternalStorageDirectory().getAbsolutePath().toString();
Log.v(LOG_TAG, root);
File myDir = new File(root + "/captured_images");
myDir.mkdirs();
Random generator = new Random();
int n = 1000;
n = generator.nextInt(n);
String fname = "Image-" + n + ".jpg";
File file = new File(myDir,fname);
if (file.exists())file.delete();
try {
FileOutputStream out = new FileOutputStream(file);
finalBitmap.compress(Bitmap.CompressFormat.JPEG,100,out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
下面是我调试的图片
**注:**
由于我使用的是原生相机,所以照片保存在相机胶卷文件夹中,即我设备中的默认文件夹。但是那里保存的图片不是压缩的,压缩图片应该保存在我创建的文件夹中。
卡住了,不知道怎么办。
非常感谢任何帮助。
试试这个
private void saveBitmap(Bitmap bitmap) {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = timeStamp + ".jpg";
File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
final String fileLoc = storageDir.getAbsolutePath() + "/folderName/" + imageFileName;
File file = new File(fileLoc);
OutputStream os = null;
try {
os = new BufferedOutputStream(new FileOutputStream(file));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, os);
try {`enter code here`
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
您需要调用 scanFile(Context context, String[] paths, String[] mimeTypes, MediaScannerConnection.OnScanCompletedListener callback) MediaScannerConnection[ 的方法=18=].
MediaScannerConnection 为应用程序提供了一种将新创建或下载的媒体文件传递到媒体扫描器服务的方法。这将使用新保存的媒体更新您的文件夹。
private void SaveImage(Bitmap finalBitmap) {
//....
if(!storageDir.exists()){
storageDir.mkdirs();
}
//...
file.createNewFile();
try {
MediaScannerConnection.scanFile(context, new String[] {file.getPath()} , new String[]{"image/*"}, null);
FileOutputStream out = new FileOutputStream(file);
finalBitmap.compress(Bitmap.CompressFormat.JPEG,100,out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}