26 Stimmen

Thumbnail Uri/Pfad des auf der SD-Karte gespeicherten Bildes abrufen + Android

SDK-Version - 1.6

Ich verwende folgende Absicht, um die Standardgalerie von Android zu öffnen:

Intent intent = new Intent();
                intent.setType("image/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(
                        Intent.createChooser(intent, "Select Picture"), 101);

Jetzt in onActivityResult Ich bin in der Lage, die ursprüngliche Uri und den Pfad des ausgewählten Bildes zu erhalten, aber ich bin nicht in der Lage, die Uri und den Pfad der Miniaturansicht des ausgewählten Bildes zu erhalten.

Code zum Abrufen der Uri und des Pfades des Originalbildes:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        try {

            if (requestCode == 101 && data != null) {

                Uri selectedImageUri = data.getData();
                String selectedImagePath = getPath(selectedImageUri);
} else {
                Toast toast = Toast.makeText(this, "No Image is selected.",
                        Toast.LENGTH_LONG);
                toast.show();
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public String getPath(Uri uri) {
        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        int column_index = cursor
                .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);

        cursor.moveToFirst();
        return cursor.getString(column_index);
    }

PS: 1) ich bin nicht auf der Suche nach einer Größenänderung des Bildes Frage . Ich bin speziell auf der Suche nach den Miniaturbildern, die von Android OS selbst generiert werden.

2) Ich verwende SDK Version 1.6 und bin nicht interessiert an ThumbnailUtils Klasse.

3voto

Changhoon Punkte 3326
public static String getThumbnailPath(Context context, String path)
{
  long imageId = -1;

  String[] projection = new String[] { MediaStore.MediaColumns._ID };
  String selection = MediaStore.MediaColumns.DATA + "=?";
  String[] selectionArgs = new String[] { path };
  Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, selection, selectionArgs, null);
  if (cursor != null && cursor.moveToFirst())
  {
    imageId = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
    cursor.close();
  }

  String result = null;
  cursor = MediaStore.Images.Thumbnails.queryMiniThumbnail(context.getContentResolver(), imageId, MediaStore.Images.Thumbnails.MINI_KIND, null);
  if (cursor != null && cursor.getCount() > 0)
  {
    cursor.moveToFirst();
    result = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails.DATA));
    cursor.close();
  }

  return result;
}

2voto

Josnidhin Punkte 12006

2voto

Yun CHEN Punkte 6230

Die akzeptierte Antwort funktioniert bei mir nicht. Ich verwende die folgende Methode, um sie zu erstellen:

    try{
        Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getActivity().getContentResolver(), uri);
        Bitmap thumbBitmap = ThumbnailUtils.extractThumbnail(bitmap,120,120);
        // imageView.setImageBitmap(thumbBitmap);
    }
    catch (IOException ex){
        //......
    }

-1voto

Nafis Kabbo Punkte 396

Die beste Antwort, um Thumbnail und alle Android-Versionen zu erhalten, ist diese:

val thumbnail: Bitmap = if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)) {
    mContentResolver.loadThumbnail(contentUri, Size.parseSize(""), null)
} else {
    MediaStore.Images.Thumbnails.getThumbnail(mContentResolver, id, MediaStore.Images.Thumbnails.MINI_KIND, null)
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X