1
votes

Existe-t-il un sélecteur «stock» pour les fournisseurs de contenu d'image?

Par exemple, lorsque je souhaite joindre une image à un message texte dans l'application Messages stockés, j'obtiens une boîte de dialogue système familière présentant l'appareil photo, la galerie et d'autres fournisseurs de contenu d'image.

Je souhaite l'utiliser dans ma propre application. Je vois de nombreuses bibliothèques qui permettent à l'utilisateur de choisir entre Galerie et Appareil photo, mais je veux que toutes la source d'image installée de l'utilisateur apparaisse.

La boîte de dialogue système de Messages (et d'autres applications courantes, telles que Mail) est-elle vraiment personnalisée pour ces applications? Avons-nous vraiment besoin de construire le nôtre? Storage Access Framework ne semble pas être la bonne solution car il contourne la caméra (ou d'autres sources d'images auxquelles je n'ai pas pensé mais qui peuvent être présentes sur l'appareil d'un utilisateur).


1 commentaires

cela vous dérangerait-il de montrer ce que vous entendez par "sélecteur de stock"?


3 Réponses :


0
votes

Je suggère d'utiliser l'image Android Android-Image-Cropper par ArthurHub

Il vous donne toutes les options que vous recherchez entrez la description de l'image ici


0 commentaires

1
votes

Ce que vous demandez peut être fait en utilisant le travail System Access Frame. Ajoutez des autorisations de stockage dans le fichier manifeste, puis vérifiez si l'autorisation est acceptée ou non. Ensuite, vous pouvez ouvrir le document ouvert et choisir de laisser l'utilisateur choisir l'image.

Code

Dans certains onClick

 @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
            }
        }
    }
}

Cela ouvrira l'activité du sélecteur de fichiers pour les fichiers image uniquement.

Ensuite, vous pouvez récupérer les résultats à l'intérieur:

Intent i = new Intent(Intent.ACTION_OPEN_DOCUMENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
startActivityForResult(i, 41);

Vous devez toujours créer le BottomSheetDialog vous-même, mais votre travail sera considérablement réduit car il n'y aura que 2 options: 1. Application appareil photo, 2. Sélecteur de fichiers. Vous devrez gérer l'événement de la caméra vous-même et obtenir l'URI de l'image.

 Sélecteur de fichiers par défaut Android


0 commentaires

1
votes

Je suggérerais Intent.ACTION_PICK

   @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;
          }

Cela ouvrira une boîte de dialogue comme celle-ci contenant toutes les applications des utilisateurs pouvant être utilisées comme sélecteur d'images: entrez la description de l'image ici

Et puis lorsque l'utilisateur choisit l'image:

  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);
  }


0 commentaires