2012-06-18 24 views
6

Próbuję zaimplementować funkcję "ustaw jako" dla obrazów. Używam Intent.ATTACH_DATA, aby użytkownicy mogli przynajmniej wybrać zdjęcie i tapetę kontaktu. Dodatki, które powinienem przejść, mylą mnie. Jeśli zapoznałem się z odpowiednią dokumentacją, powinienem być:Jak korzystać z funkcji Intent.ATTACH_DATA

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

Powinno być wszystkim. Działa to w przypadku tapet, ale w przypadku danych megapikselowych aplikacja ulega awarii, ponieważ nie można znaleźć żadnej aktywności związanej z uprawą. Czy ktoś ma działający przykład? Oficjalna aplikacja galerii potrafi znaleźć działanie camera.crop ...

Ogólna wskazówka, gdzie można znaleźć szczegółową dokumentację dotyczącą intencji systemu, jest również mile widziana.

Odpowiedz

13

Po długiej i krętej drodze przez źródło Androida, znalazłem właściwy kod w domyślnej galerii (gallery3d). Zaadaptowałem go do użytku we własnej aplikacji i ponownie go przepisałem dla wygody podczas importowania w innych aplikacjach. Jeśli używasz lub docenisz to, proszę o poparcie tej odpowiedzi.

Adaptacja: gallery3d source at grepcode

Wykorzystanie: zmienić pierwszą linię pasujące pełną ścieżkę (począwszy/mnt /) na zdjęciu. dodaj ciąg "set_as" do pliku strings.xml jako tytuł wybierania akcji.

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

Myślę, że to działa, podczas gdy każda inna odpowiedź na SO nie jest, ponieważ dodaje plik: // przed uri – user11230

Powiązane problemy