gpt4 book ai didi

java - 是否有图像内容提供者的 "stock"选择器?

转载 作者:行者123 更新时间:2023-11-29 18:36:01 28 4
gpt4 key购买 nike

例如,当我想在普通消息应用程序中将图像附加到文本消息时,我会看到一个熟悉的系统对话框,其中显示相机、图库和其他图像内容提供程序。

我想在我自己的应用程序中使用它。我看到很多库允许用户在 Gallery 和 Camera 之间进行选择,但我希望显示用户安装的所有图像源。

Messages(以及其他常用应用程序,例如 Mail)的系统对话框真的是为这些应用程序定制的吗?我们真的需要建立自己的吗?存储访问框架似乎不是正确的解决方案,因为它绕过了相机(或我没有想到但可能存在于用户设备上的其他图像源)。

最佳答案

我会建议 Intent.ACTION_PICK

  private void selectFileFromGallery() {
Intent intent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType("image/*");


startActivityForResult(Intent.createChooser(intent,
"Select Picture"), requestGallery);
}

它将打开一个像这样的对话框,其中包含所有可用作图像选择器的用户应用程序:enter image description here

然后当用户选择图片时:

   @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == requestGallery) {
onSelectFromGalleryResult(data);
}
}

@SuppressWarnings("deprecation")
private void onSelectFromGalleryResult(Intent data) {
Uri uri = data.getData();
if (!uri.toString().contains("file")) {
if (uri.toString().contains("external")) {//chosen from external storage
photoUri = Uri.parse("file://" + getRealPathFromURI(uri));
} else {
photoUri = Uri.parse("file://" + (Build.VERSION.SDK_INT <= 18
? getRealPathFromURI_API11to18(getActivity(), uri) :
getRealPathFromURI_API19(getActivity(), uri)));
}

}

@SuppressLint("NewApi")
private String getRealPathFromURI_API19(Context context, Uri uri) {
return RealPathUtil.INSTANCE.getRealPathFromURI_API19(context, uri);
}

public String getRealPathFromURI(Uri contentUri) {
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = getActivity().managedQuery(contentUri, proj, null, null, null);
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
@SuppressLint("NewApi")
private String getRealPathFromURI_API11to18(Context context, Uri contentUri) {
String[] proj = { MediaStore.Images.Media.DATA };
String result = null;

CursorLoader cursorLoader = new CursorLoader(
context,
contentUri, proj, null, null, null);
Cursor cursor = cursorLoader.loadInBackground();

if (cursor != null) {
int column_index =
cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
result = cursor.getString(column_index);
}
return result;
}

关于java - 是否有图像内容提供者的 "stock"选择器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54332798/

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