android - ubicación - google maps croquis
Compartir mapa de bits a través de la intención de Android (4)
En mi aplicación de Android, tengo un mapa de bits (digamos b) y un botón. Ahora cuando hago clic en el botón, quiero compartir el mapa de bits. Estoy haciendo uso del siguiente código dentro de mi onClick()
para lograr esto: -
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/png");
intent.putExtra(Intent.EXTRA_STREAM, b);
startActivity(Intent.createChooser(intent , "Share"));
Esperaba una lista de todas las aplicaciones que pueden manejar esta intención, pero no recibo nada. No hay una lista de aplicaciones ni hay ningún error en el estudio de Android. Mi aplicación acaba de ser colgada por algún tiempo y luego se cierra.
He revisado el mapa de bits y está bien (no es nulo).
¿Dónde estoy yendo mal?
ImageButton capture_share = (ImageButton) findViewById(R.id.share);
capture_share.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String bitmapPath = MediaStore.Images.Media.insertImage(getContentResolver(), bitmap,"title", null);
Uri bitmapUri = Uri.parse(bitmapPath);
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/png");
intent.putExtra(Intent.EXTRA_STREAM, bitmapUri);
startActivity(Intent.createChooser(intent, "Share"));
}
});
Citando la documentación :
Un contenido: URI que contiene una secuencia de datos asociados con Intent, utilizado con ACTION_SEND para suministrar los datos que se envían.
b
, por lo tanto, no se supone que sea un Bitmap
, sino un Uri
apunta a un Bitmap
, servido por un ContentProvider
. Por ejemplo, podría escribir el Bitmap
de Bitmap
en un archivo, luego usar FileProvider
para servirlo.
Como CommonsWare declaró que necesita obtener el URI en el mapa de bits y pasarlo como su Extra.
String bitmapPath = Images.Media.insertImage(getContentResolver(), bitmap,"title", null);
Uri bitmapUri = Uri.parse(bitmapPath);
...
intent.putExtra(Intent.EXTRA_STREAM, bitmapUri );
** finalmente recibí la solución. **
Paso 1: Bloque de manejo de intención de compartir. Aparecerá su ventana con la lista de aplicaciones en su teléfono
public void share_bitMap_to_Apps() {
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("image/*");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
/*compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bytes = stream.toByteArray();*/
i.putExtra(Intent.EXTRA_STREAM, getImageUri(mContext, getBitmapFromView(relative_me_other)));
try {
startActivity(Intent.createChooser(i, "My Profile ..."));
} catch (android.content.ActivityNotFoundException ex) {
ex.printStackTrace();
}
}
Paso 2: convertir tu vista en BItmap
public static Bitmap getBitmapFromView(View view) {
//Define a bitmap with the same size as the view
Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
//Bind a canvas to it
Canvas canvas = new Canvas(returnedBitmap);
//Get the view''s background
Drawable bgDrawable = view.getBackground();
if (bgDrawable != null)
//has background drawable, then draw it on the canvas
bgDrawable.draw(canvas);
else
//does not have background drawable, then draw white background on the canvas
canvas.drawColor(Color.WHITE);
// draw the view on the canvas
view.draw(canvas);
//return the bitmap
return returnedBitmap;
}
Paso 3 :
Para obtener el URI de la imagen de mapa de bits
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);
}