2011-11-28 33 views
26

Estoy tratando de compartir imágenes con Facebook, Twitter, etc. usando SHARE INTENT de Android.¿Cómo puedo transformar un mapa de bits en un Uri?

me pareció código para enviar una imagen a la intención acción, pero este código necesita el URI del mapa de bits: fullSizeImageUri

Este es el código completo:

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

Por favor, alguien puede ayudarme transformar un mapa de bits en un Uri?

gracias

Respuesta

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

Analizar siempre toma como argumento una cadena no un archivo. La próxima vez lea detalles sobre las funciones o quizás las pruebe. – Arkde

+2

siento Arkde pequeña confusión alguna manera gracias por recordar a –

+4

no podemos obtener Uri sin guardar el mapa de bits – Prasad

0

Así no se pueden Transforma un archivo de mapa de bits en un URI. Leer más sobre URI here

URI es un Identificador Uniforme de Recursos. Sin embargo, se puede colocar el mapa de bits en una URI absoluta o relativa como ésta

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

entonces, ¿cómo se puede lograr mis necesidades? ¿es imposible? – NullPointerException

+0

supongo que tiene que reconsiderar su manera de ver esto ... ver Facebook y Twitter APIS para ver cómo se puede lograr que se comparten imágenes – Arkde

50

Aquí está Blog del Colin que sugieren el método simple para convertir mapas de bits a 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

Pero cómo borrar la imagen insertada ?? que crea una gran cantidad de imágenes en la carpeta .. – Noman

+4

que no trabajan en KitKat y por encima de – DroidLearner

+0

no funciona en Android desgaste – Lunatikul

0

La solución anterior usa la tienda de medios y almacena la imagen en la carpeta de la imagen principal del usuario para que se pueda ver a través de la galería/el visor de fotos. Esta solución lo almacenará como un archivo temporal en sus datos de aplicaciones. En este ejemplo, inImage es un mapa de bits y el título es una cadena para el nombre del archivo de imagen.

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

pase mapa de bits y compressFormat como (PNG, JPG, etc ...) y calidad de imagen en porcentaje

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

ruta puede ser nulo, por lo que su código se bloqueará en Uri.parse (ruta) –

+0

comprobar que la ruta es nula o no. y después de pasar en Uri –

Cuestiones relacionadas