2011-11-28 18 views
26

Próbuję udostępnić obrazy za pomocą Facebooka, Twittera itp. Za pomocą SHARE INTENT z Android.Jak mogę przekształcić bitmapę w Uri?

znalazłem kod, aby wysłać obraz do intencji zakładowego, ale kod ten musi URI bitmapy: fullSizeImageUri

Jest to pełny kod:

private void startShareMediaActivity(Bitmap image) { 
    boolean isVideo=false; 
    String mimeType="bmp"; 
    Uri fullSizeImageUri=null; 
    Intent intent = new Intent(); 
    intent.setAction(Intent.ACTION_SEND); 
    intent.setType(mimeType); 
    intent.putExtra(Intent.EXTRA_STREAM, fullSizeImageUri); 
    try { 
     startActivity(Intent.createChooser(intent, (isVideo ? "video" : "image"))); 
    } catch (android.content.ActivityNotFoundException ex) { } 
} 

Proszę, może ktoś mi pomoże przekształcić bitmapę w Uri?

dzięki

Odpowiedz

17
String FILENAME = "image.png"; 
String PATH = "/mnt/sdcard/"+ FILENAME; 
File f = new File(PATH); 
Uri yourUri = Uri.fromFile(f); 
+1

Analiza zawsze traktowana jako argument a Ciąg nie jest plikiem. Następnym razem przeczytaj szczegóły funkcji lub przetestuj je. – Arkde

+2

Przepraszam Arkde małe zamieszanie w dowolny sposób, dzięki za przypomnienie –

+4

nie możemy uzyskać Uri bez zapisywania bitmapy – Prasad

0

No nie można Transformacja plik mapy bitowej do URI. Więcej informacji o identyfikatorze URI here

URI to jednolity identyfikator zasobu. Ale można umieścić bitmapę w bezwzględną lub względną URI jak ten

Absolute: http://android.com/yourImage.bmp 
Relative: yourImage.bmp 
+0

następnie w jaki sposób można osiągnąć moje potrzeby? to niemożliwe? – NullPointerException

+0

Myślę, że musisz przemyśleć swoją drogę, aby to zobaczyć ... sprawdź Facebook i twitter APIS, aby zobaczyć, jak możesz osiągnąć to udostępnianie obrazu. – Arkde

50

Oto Colin Blog którzy sugerują prosty sposób przekonwertować bitmapę do Uri Click here

public Uri getImageUri(Context inContext, Bitmap inImage) { 
    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
    String path = Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null); 
    return Uri.parse(path); 
} 
+5

Ale jak usunąć wstawiony obraz? tworzy wiele zdjęć w folderze .. – Noman

+4

nie działa w KitKat i powyżej – DroidLearner

+0

nie działa na Androidzie noży – Lunatikul

0

Powyższe rozwiązanie wykorzystuje magazyn multimediów i przechowuje obraz w głównym folderze obrazów użytkownika, dzięki czemu można go oglądać w przeglądarce galerii/zdjęć. To rozwiązanie zapisuje je jako tymczasowy plik w danych aplikacji. W tym przykładzie inImage jest bitmapą, a title jest ciągiem znaków dla nazwy pliku obrazu.

File tempDir= Environment.getExternalStorageDirectory(); 
    tempDir=new File(tempDir.getAbsolutePath()+"/.temp/"); 
    tempDir.mkdir(); 
    File tempFile = File.createTempFile(title, ".jpg", tempDir); 
    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
    byte[] bitmapData = bytes.toByteArray(); 

    //write the bytes in file 
    FileOutputStream fos = new FileOutputStream(tempFile); 
    fos.write(bitmapData); 
    fos.flush(); 
    fos.close(); 
    return Uri.fromFile(tempFile); 
0
String picName = "pic.jpg"; 
     String PATH = Environment.getExternalStorageDirectory().getPath()+ picName; 
     File f = new File(PATH); 
     Uri yourUri = Uri.fromFile(f); 
-1

wprost bitmapy i compressFormat jak (PNG, JPG, etc ...) i jakość obrazu w procentach

public Uri getImageUri(Bitmap src, Bitmap.CompressFormat format, int quality) { 
    ByteArrayOutputStream os = new ByteArrayOutputStream(); 
    src.compress(format, quality, os); 

    String path = MediaStore.Images.Media.insertImage(getContentResolver(), src, "title", null); 
    return Uri.parse(path); 
} 
+0

Ścieżka może mieć wartość NULL, więc Twój kod ulegnie awarii na ścieżce Uri.parse (ścieżka) –

+0

ścieżka wyboru jest pusta lub nie. i po przejściu w Uri –

Powiązane problemy