Android 通过Intent.ACTION\u PICK将拾取的图像复制到文件
我的代码允许用户使用Intent.ACTION\u点击按钮选择图像:Android 通过Intent.ACTION\u PICK将拾取的图像复制到文件,android,Android,我的代码允许用户使用Intent.ACTION\u点击按钮选择图像: public void onClick(视图v){ 意向照片采集器内容=新意向(意向.行动\u采集器); photopickerinent.setType(“image/*”); startActivityForResult(照片采集器内容,选择照片); }您需要实现onActivityResult,当用户从其库中拾取照片后,您的活动从恢复时将调用该功能 意图数据将是一个Uri,您需要提取磁盘上映像的绝对路径 大概是这样的:
public void onClick(视图v){
意向照片采集器内容=新意向(意向.行动\u采集器);
photopickerinent.setType(“image/*”);
startActivityForResult(照片采集器内容,选择照片);
}
您需要实现onActivityResult
,当用户从其库中拾取照片后,您的活动从恢复时将调用该功能
意图数据将是一个Uri
,您需要提取磁盘上映像的绝对路径
大概是这样的:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == SELECT_PHOTO && resultCode == Activity.RESULT_OK) {
File file = getBitmapFile(data);
if(file != null) {
// do something with the file
}
}
}
public File getBitmapFile(Intent data) {
Uri selectedImage = data.getData();
Cursor cursor = getContentResolver().query(selectedImage, new String[] { android.provider.MediaStore.Images.ImageColumns.DATA }, null, null, null);
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
String selectedImagePath = cursor.getString(idx);
cursor.close();
return new File(selectedImagePath);
}
如果您的用户在手机上启用了Picassa(或任何其他基于云的照片服务),操作系统可能会允许他们从该来源选择图像。问题是,这样做的结果不符合getBitmapFile
中的逻辑-也就是说,这与拾取本地文件不同。要解决此问题,您可以确保您的选取器仅允许本地文件:
photopickerinent.putExtra(仅限Intent.EXTRA\u LOCAL\u,true)代码>
要将位图存储到另一个文件,您还需要两种方法:
private boolean writeBitmapToFile(Bitmap bitmap, File destination) {
FileOutputStream out = null;
try {
out = new FileOutputStream(destination);
return bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
} catch (Exception ex) {
Log.i(TAG, String.format("Error writing bitmap to %s: %s", destination.getAbsoluteFile(), ex.getMessage()));
return false;
} finally {
try {
if (out != null) {
out.close();
}
}catch (IOException ex) {}
}
}
private File createImageFile() throws IOException {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(imageFileName, ".jpg", storageDir);
return image;
}
要使用这些方法:
private boolean writeBitmapToFile(Bitmap bitmap, File destination) {
FileOutputStream out = null;
try {
out = new FileOutputStream(destination);
return bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
} catch (Exception ex) {
Log.i(TAG, String.format("Error writing bitmap to %s: %s", destination.getAbsoluteFile(), ex.getMessage()));
return false;
} finally {
try {
if (out != null) {
out.close();
}
}catch (IOException ex) {}
}
}
private File createImageFile() throws IOException {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(imageFileName, ".jpg", storageDir);
return image;
}
writeBitmapToFile(位图,createImageFile())代码>我想将此选定图像以Uri的形式存储到一个临时文件中,该临时文件是使用image=file.createTempFile(imageFileName、/*前缀/“.jpg”、/suffix/storageDir/directory*/)创建的;谢谢你,科迪。我正在寻找writeBitmapToFile()函数。