2014-09-26 25 views
19

i złożyć aplikację, która pozwala użytkownikowi podzielić obraz przy użyciu android intencje, ale jak się to URIjest tam, aby uzyskać uri bitmapy bez zapisania jej na sdcard?

bitmapę z obecnie trzeba zapisać go do sdcard I

Użyłem ten kod, który działa prawidłowo ale nie trzeba zapisać bitmapę do sdcard

private 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); 
    } 

muszę się że URI z obecnie zapisać, że bitmapy do sdcard

+0

znaczy „Chcesz uzyskać URI w pamięci bitmapę” ?? –

+0

@Sagar Pilkhwal Chcę uzyskać uri bitmapy, aby go udostępnić, ale nie muszę jej zapisywać w wewnętrznej lub zewnętrznej pamięci ... czy to możliwe? –

+0

Nie jest to niemożliwe, musisz zapisać plik na karcie SD, a następnie udostępnić go, a następnie usunąć plik –

Odpowiedz

17

Spróbuj tego:

protected void ShareImage(Intent intent) { 
    try { 
     URL url = new URL(mImageUrl); 
     Bitmap image = BitmapFactory.decodeStream(url.openConnection().getInputStream()); 
     intent.putExtra(Intent.EXTRA_STREAM, getImageUri(mActivity, image)); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    startActivityForResult(Intent.createChooser(intent, 1001)); 
} 

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

public void onActivityResult(int requestCode, int resultCode, Intent data){ 
    //check for result is OK and then check for your requestCode(1001) and then delete the file 

} 
+1

Tak, to jest to, czego potrzebuję dziękuję ... nie wiem dlaczego ta metoda wychodzi z mojego umysłu: D .. jeszcze raz dziękuję. –

+1

Teraz będziesz pamiętać to odtąd ... :) –

+0

tak, dziękuję :) –

1

Spróbuj w ten sposób

protected void tryToShareImage(Intent intent) { 
    try { 
     URL url = new URL(mImageUrl); 
     Bitmap image = BitmapFactory.decodeStream(url.openConnection().getInputStream()); 
     intent.putExtra(Intent.EXTRA_STREAM, getImageUri(mActivity, image)); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    startActivity(Intent.createChooser(intent, "Share using...")); 
} 

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

po tym można usuwać pliki za pomocą File.delete()

+0

kiedy mogę usunąć ten plik Nie wiem, kiedy użytkownik może zdecydować się udostępnić, jeśli usunę plik po rozpoczęciu intencji nie znaleziono Uri –

+1

Po pomyślnym przesłaniu pliku można usunąć plik. Jeśli używasz AsyncTask, a następnie w onPostExecute, możesz usunąć. – Derek