gpt4 book ai didi

android - 从 android 5.0 中的图库中选择照片

转载 作者:IT王子 更新时间:2023-10-28 23:35:02 25 4
gpt4 key购买 nike

我在使用 android 5.0 从图库中挑选图像时遇到问题。我的启动 Intent 代码是:

private void takePictureFromGallery() 
{
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(intent, PICK_FROM_FILE);
}

这里是请求代码 PICK_FROM_FILE 的 onActivityResult() 方法中调用的函数

private void handleGalleryResult(Intent data) 
{
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };

Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();

int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
// field declaration private String mTmpGalleryPicturePath;
mTmpGalleryPicturePath = cursor.getString(columnIndex);
cursor.close();
// at this point mTmpGalleryPicturePath is null
...
}

对于 5.0 之前的版本,此代码始终有效,使用 com.android.gallery 应用程序。 Google Photos 是 Android 5.0 上的默认图库应用程序。这个问题可能取决于应用程序还是新的 android OS 发行版的问题?

编辑

我了解问题所在:Google 相册会自动在云服务器上浏览其备份图像的内容。事实上,如果我关闭每个互联网连接并选择图像后,@maveň 的尝试实践建议,它不会通过从 InputStream 解码位图得到结果。

所以此时问题变成了:在 android 5.0 中有没有办法处理 Intent.ACTION_PICK Action ,以便系统浏览在本地设备图片库中选择?

最佳答案

我结合以下方法找到了解决此问题的方法。在这里开始从设备库中挑选图像的 Activity :

private void takePictureFromGallery() 
{
startActivityForResult(
Intent.createChooser(
new Intent(Intent.ACTION_GET_CONTENT)
.setType("image/*"), "Choose an image"),
PICK_FROM_FILE);
}

这里处理 Intent 的结果,如 post 中所述,请注意 getPath() 函数的工作方式与 android build 版本不同:

private void handleGalleryResult(Intent data) 
{
Uri selectedImage = data.getData();
mTmpGalleryPicturePath = getPath(selectedImage);
if(mTmpGalleryPicturePath!=null)
ImageUtils.setPictureOnScreen(mTmpGalleryPicturePath, mImageView);
else
{
try {
InputStream is = getContentResolver().openInputStream(selectedImage);
mImageView.setImageBitmap(BitmapFactory.decodeStream(is));
mTmpGalleryPicturePath = selectedImage.getPath();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

@SuppressLint("NewApi")
private String getPath(Uri uri) {
if( uri == null ) {
return null;
}

String[] projection = { MediaStore.Images.Media.DATA };

Cursor cursor;
if(Build.VERSION.SDK_INT >19)
{
// Will return "image:x*"
String wholeID = DocumentsContract.getDocumentId(uri);
// Split at colon, use second item in the array
String id = wholeID.split(":")[1];
// where id is equal to
String sel = MediaStore.Images.Media._ID + "=?";

cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection, sel, new String[]{ id }, null);
}
else
{
cursor = getContentResolver().query(uri, projection, null, null, null);
}
String path = null;
try
{
int column_index = cursor
.getColumnIndex(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
path = cursor.getString(column_index).toString();
cursor.close();
}
catch(NullPointerException e) {

}
return path;
}
  • takePictureFromGallery()onActivityResult
  • 调用

就是这样!!

关于android - 从 android 5.0 中的图库中选择照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27038051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com