2012-06-18 7 views
6

Ich versuche, "set as" -Funktionalität für Bilder zu implementieren. Ich benutze Intent.ATTACH_DATA, so dass Benutzer zumindest Kontaktfotos und Hintergrundbilder auswählen können. Die Extras, die ich weitergeben sollte, verwirren mich. Wenn ich die Dokumentation richtig lese,Verwendung Intent.ATTACH_DATA

Intent intent = new Intent(Intent.ACTION_ATTACH_DATA); 
    intent.setType("image/*"); 
intent.setData(mImageCaptureUri); 
     startActivity(Intent.createChooser(intent, "hey")); 

Sollte alles sein. Dies funktioniert für Hintergrundbilder, aber mit Megapixeldaten stürzt die App ab, weil keine Ernteaktivität gefunden werden konnte. Hat jemand ein funktionierendes Beispiel? Die offizielle Galerie-App schafft es, die camera.crop-Aktivität zu finden ...

Ein allgemeiner Hinweis darauf, wo man eine ausgefeilte Systemabsichtsdokumentation finden kann, ist ebenfalls willkommen.

Antwort

13

Nach einer langen und kurvenreichen Straße durch die Android-Quelle fand ich den tatsächlichen Code in der Standard-Galerie (gallery3d) App. Ich passte für die Verwendung in meiner eigenen Anwendung, und schrieb es wieder für die Bequemlichkeit beim Importieren in anderen Anwendungen neu. Wenn Sie dies nutzen oder schätzen, bitte ich Sie, diese Antwort zu beantworten.

Übernommen aus: gallery3d source at grepcode

Verbrauch: erste Zeile ändern Sie den vollständigen Pfad (beginnend mit/mnt /) Ihr Foto anzupassen. Fügen Sie string "set_as" zu Ihrer strings.xml als Aktionswähler-Titel hinzu.

String absolutepath = MyApplication.appRootDir + relpath;//change for your application 
    Intent intent = new Intent(Intent.ACTION_ATTACH_DATA); 
    MimeTypeMap map = MimeTypeMap.getSingleton(); 
    String ext = absolutepath.substring(absolutepath.lastIndexOf('.') + 1); 
    String mimeType = map.getMimeTypeFromExtension(ext); 
    Uri uri = Uri.fromFile(new File(absolutepath)); 
    intent.setDataAndType(uri, mimeType); 
    intent.putExtra("mimeType", mimeType); 
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
    Activity activity = (Activity) this; 
    activity.startActivity(Intent.createChooser(
      intent, activity.getString(R.string.set_as))); 
+0

Ich denke, dass dies funktioniert, während jede andere Antwort auf SO nicht ist, weil es file: // vor der URI hinzufügt – user11230

Verwandte Themen