Bild öffnen, wenn App über Gallerie-Share startet

  • 6 Antworten
  • Letztes Antwortdatum
I

Ich-Bins

Neues Mitglied
0
Hallo liebes Forum,

ich versuche gerade ein Bild zu öffnen, welches mir über getIntent() von der Gallerie-App gegeben wird, um es dann weiterzuverarbeiten.

Folgendes steht bis jetzt:

Code:
protected void onCreate(Bundle savedInstanceState) {
	//...
		
	Intent intent = getIntent();
	String action = intent.getAction();
	String type = intent.getType();
	if (Intent.ACTION_SEND.equals(action) && type != null) {
		if (type.startsWith("image/")) {
	            handleSendImage(intent); // Handle single image being sent
	        } else {
	        // Handle other intents, such as being started from the home screen
	        }	    
	}

void handleSendImage(Intent intent) {
	    Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
	    if (imageUri != null) {
	        // Update UI to reflect image being shared
	    	TextView tv = (TextView) findViewById(R.id.textView1);
	    	tv.setText(imageUri.toString());   	
	    	
	    	try {
	    		Context context = this;
	    		
				// Input und Output vorbereiten
				FileInputStream fis = new FileInputStream(new File(imageUri.getPath()));
				FileOutputStream fos = new FileOutputStream(new File(context.getFilesDir(), "encrypted.jpg"));
				
				// eigene Methode zum Verschluesseln aufrufen
				encrypt("key", fis, fos);
				
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (Throwable e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	    }

Fehler: File not found beim Aufruf FileInputStream fis = new FileInputStream(new File(imageUri.getPath()));

Wie komme ich an das Bild heran? Danke für euer Hilfe.

Ich-Bins
 
1. was zeigt dir dein "tv" an?

2. von "Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);" kannst du den cast "(Uri)" entfernen
 
Danke für die schnelle Antwort.

Ausgabe vom TextView tv : "content://media/external/images/media/13"
 
Ok ich habs:

Code:
.
.
.
.
FileInputStream fis = new FileInputStream(new File(getRealPathFromURI(this,imageUri)));
.
.
.
.
.
public String getRealPathFromURI(Context context, Uri contentUri) {
  Cursor cursor = null;
  try { 
    String[] proj = { MediaStore.Images.Media.DATA };
    cursor = context.getContentResolver().query(uri,  proj, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
  } finally {
    if (cursor != null) {
      cursor.close();
    }
  }
 
Vielen Dank cuehrer.
Sieht doch nicht so simpel aus. Ich weiß nicht, wie darauf hätte kommen können. Verwundert mich ehrlich, warum eine so banale Sache nicht einfacher geht. Ich werde ja bestimmt nicht der erste sein, der vor diesem Problem stand.

Also vielen Dank nochmal!

Grüße,

Ich-Bins
 
Das problem ist eben das ein File URI kein "echter" Datei Pfad ist.
Wenn mir jemand den Vorteil von der Struktur eines URI (content://, content/) gegenüber eines kompletten file paths (/mnt/sdcard/...) sagen kann wäre ich dankebar ;)


Ps. Danke drücken kostet nix :thumbup:

Sent from my GT-I9100 using Android-Hilfe.de App
 
Eine URI ist zumindest theoretisch universaler.
Bei Bildern auf dem Smartphone macht das wenig Sinn, die existieren normalerweise ja nur auf dem einen Smartphone.
Bei Dateien die aber auf allen Telefonen vorhanden sind könnte man damit die URI einfach verschicken und auf einem anderen Telefon (bei dem die Datei evtl in einem anderen echten Pfad liegt) die gleiche Datei ansprechen.
Ebenso kann ma so alle möglichen Dateiquellen ansprechen mit einem entsprehenden resolver.
sprich content://, file://, http://, ftp:// etc können alle gleich behandelt werden.

Deshalb nutzt man URIs wie genau man dann dran kommt muss die eigene App entscheiden.
 
  • Danke
Reaktionen: cuehrer

Ähnliche Themen

AnnaBauer21
Antworten
0
Aufrufe
488
AnnaBauer21
AnnaBauer21
AnnaBauer21
Antworten
6
Aufrufe
989
AnnaBauer21
AnnaBauer21
G
Antworten
0
Aufrufe
132
Gerdchen07
G
G
Antworten
1
Aufrufe
384
Gerdchen07
G
G
Antworten
13
Aufrufe
599
Gerdchen07
G
Zurück
Oben Unten