2014-09-26 1 views
19

я сделать приложение, которое позволяет пользователям обмениваться изображениями с помощью андроида намерения, но как получить, что УИРесть прочь, чтобы получить uri растрового изображения без сохранения его на SDCard?

растрового изображения с вне нужно, чтобы сохранить его в SDCARD I

я использовал этот код, который отлично работает но мне не нужно, чтобы сохранить растровое изображение в 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); 
    } 

мне нужно получить, что URI с из экономии, что растровое изображение в SDCard

+0

вы имеете в виду «Вы хотите получить Ури в памяти, Bitmap» ?? –

+0

@Sagar Pilkhwal Я хочу получить uri растрового изображения, чтобы поделиться им, но мне не нужно сохранять его во внутреннее или внешнее хранилище ... это возможно? –

+0

Нет, это не возможно, вам нужно будет сохранить файл на SD-карте, а затем поделиться им, а затем удалить файл –

ответ

17

Попробуйте это:

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

да, это то, что мне нужно, спасибо ... я не знаю, почему этот метод исходит из моего разума: D .. еще раз спасибо. –

+1

Теперь вы запомните это впредь ... :) –

+0

да спасибо :) –

1

Попробуйте этот путь

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

после этого можно удалить файлы с помощью File.delete()

+0

, когда я могу удалить этот файл, я не знаю, когда пользователь может выбрать, если я удалю файл после начала. Uri dont found –

+1

Когда файл загружен успешно, вы можете удалить файл. Если вы используете AsyncTask, то в onPostExecute вы можете удалить. – Derek