Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有一个“问题”;股票;图像内容提供商的选择器?_Java_Android_File_Android Contentprovider - Fatal编程技术网

Java 是否有一个“问题”;股票;图像内容提供商的选择器?

Java 是否有一个“问题”;股票;图像内容提供商的选择器?,java,android,file,android-contentprovider,Java,Android,File,Android Contentprovider,例如,当我想在stock Messages应用程序中将图像附加到文本消息时,我会看到一个熟悉的系统对话框,其中显示相机、多媒体资料和其他图像内容提供商 我想在我自己的应用程序中使用它。我看到很多库允许用户在Gallery和Camera之间进行选择,但我希望用户安装的所有图像源都显示出来 来自消息(和其他股票应用程序,如邮件)的系统对话框是否真的针对这些应用程序定制?我们真的需要建立自己的公司吗?Storage Access Framework似乎不是正确的解决方案,因为它绕过了摄像头(或我没有想

例如,当我想在stock Messages应用程序中将图像附加到文本消息时,我会看到一个熟悉的系统对话框,其中显示相机、多媒体资料和其他图像内容提供商

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


来自消息(和其他股票应用程序,如邮件)的系统对话框是否真的针对这些应用程序定制?我们真的需要建立自己的公司吗?Storage Access Framework似乎不是正确的解决方案,因为它绕过了摄像头(或我没有想到但可能出现在用户设备上的其他图像源)。

我建议使用android image

它为您提供了所有您正在寻找的选项

您要的东西可以使用系统访问框架来完成。 在清单文件中添加存储权限,然后检查该权限是否被接受。然后,您可以打开“打开文档选择”,让用户选择图像

代码

在一些地方

这将仅为图像文件打开文件选择器活动

然后,您可以返回内部的结果:

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK){
        if (requestCode == 41) {
            if (data != null) {
                Uri uri = data.getData();
                //This is the uri to the file
                //To get the file use the uri
            }
        }
    }
}
您仍然需要自己创建BottomSheetDialog,但是您的工作将大大减少,因为只有两个选项:1。相机应用程序,2。文件选择器。您必须自己处理相机事件并获取图像uri


我建议
意图。行动\u选择

  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);
  }
它将打开这样一个对话框,其中包含所有可用作图像选择器的应用程序用户:

当用户选择图像时:

   @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;
          }
@覆盖
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
if(resultCode==RESULT\u OK){
if(requestCode==requestGallery){
onSelectFromGalleryResult(数据);
}
}
@抑制警告(“弃用”)
从GalleryResult(意向数据)中选择的专用void{
Uri=data.getData();
如果(!uri.toString().包含(“文件”)){
如果(uri.toString()包含(“外部”){//从外部存储中选择
photoUri=Uri.parse(“文件:/”+getRealPathFromURI(Uri));
}否则{

photoUri=Uri.parse(“文件:/”+(Build.VERSION.SDK_INT)您介意展示一幅您所说的“股票选择器”的图片吗?
   @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;
          }