studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android bitmap google-cloud-messaging android-notifications android-notification-bar

para - manual de programacion android pdf



Cargar imagen de url en notificación Android (2)

Cómo implementar la notificación de estilo BigPicture :

Milagro ha sido realizado por .setStyle(new Notification.BigPictureStyle().bigPicture(result)) :

He hecho esto con:

Generar notificación por AsyncTask :

new generatePictureStyleNotification(this,"Title", "Message", "http://api.androidhive.info/images/sample.jpg").execute();

AsyncTask :

public class generatePictureStyleNotification extends AsyncTask<String, Void, Bitmap> { private Context mContext; private String title, message, imageUrl; public generatePictureStyleNotification(Context context, String title, String message, String imageUrl) { super(); this.mContext = context; this.title = title; this.message = message; this.imageUrl = imageUrl; } @Override protected Bitmap doInBackground(String... params) { InputStream in; try { URL url = new URL(this.imageUrl); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.connect(); in = connection.getInputStream(); Bitmap myBitmap = BitmapFactory.decodeStream(in); return myBitmap; } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } @TargetApi(Build.VERSION_CODES.JELLY_BEAN) @Override protected void onPostExecute(Bitmap result) { super.onPostExecute(result); Intent intent = new Intent(mContext, MyOpenableActivity.class); intent.putExtra("key", "value"); PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 100, intent, PendingIntent.FLAG_ONE_SHOT); NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); Notification notif = new Notification.Builder(mContext) .setContentIntent(pendingIntent) .setContentTitle(title) .setContentText(message) .setSmallIcon(R.mipmap.ic_launcher) .setLargeIcon(result) .setStyle(new Notification.BigPictureStyle().bigPicture(result)) .build(); notif.flags |= Notification.FLAG_AUTO_CANCEL; notificationManager.notify(1, notif); } }

En mi aplicación de Android, quiero configurar dinámicamente los iconos de notificación que se cargarán desde la URL. Para eso, setLargeIcon propiedad setLargeIcon de NotificationBuilder en el receiver . Referí muchos enlaces pero probé varias soluciones pero no pude obtener el resultado deseado. Aunque descargué esa imagen de la URL y configuré ese mapa de bits en la notificación, no se muestra, en su lugar muestra la imagen setSmallIcon como un icono grande. No sé dónde voy mal. Aquí estoy publicando mi código. Porfavor ayudame a resolver este problema. Gracias.

Código:

@SuppressLint("NewApi") public class C2DMMessageReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if ("com.google.android.c2dm.intent.RECEIVE".equals(action)) { Log.e("C2DM", "received message"); final String fullName = intent.getStringExtra("message"); final String payload1 = intent.getStringExtra("message1"); final String payload2 = intent.getStringExtra("message2"); final String userImage = intent.getStringExtra("userImage"); Log.e("userImage Url :", userImage); //it shows correct url new sendNotification(context) .execute(fullName, payload1, userImage); } } private class sendNotification extends AsyncTask<String, Void, Bitmap> { Context ctx; String message; public sendNotification(Context context) { super(); this.ctx = context; } @Override protected Bitmap doInBackground(String... params) { InputStream in; message = params[0] + params[1]; try { in = new URL(params[2]).openStream(); Bitmap bmp = BitmapFactory.decodeStream(in); return bmp; } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Bitmap result) { super.onPostExecute(result); try { NotificationManager notificationManager = (NotificationManager) ctx .getSystemService(Context.NOTIFICATION_SERVICE); Intent intent = new Intent(ctx, NotificationsActivity.class); intent.putExtra("isFromBadge", false); Notification notification = new Notification.Builder(ctx) .setContentTitle( ctx.getResources().getString(R.string.app_name)) .setContentText(message) .setSmallIcon(R.drawable.ic_launcher) .setLargeIcon(result).build(); // hide the notification after its selected notification.flags |= Notification.FLAG_AUTO_CANCEL; notificationManager.notify(1, notification); } catch (Exception e) { e.printStackTrace(); } } }


Cambié mi código de la siguiente manera y está funcionando ahora:

private class sendNotification extends AsyncTask<String, Void, Bitmap> { Context ctx; String message; public sendNotification(Context context) { super(); this.ctx = context; } @Override protected Bitmap doInBackground(String... params) { InputStream in; message = params[0] + params[1]; try { URL url = new URL(params[2]); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.connect(); in = connection.getInputStream(); Bitmap myBitmap = BitmapFactory.decodeStream(in); return myBitmap; } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Bitmap result) { super.onPostExecute(result); try { NotificationManager notificationManager = (NotificationManager) ctx .getSystemService(Context.NOTIFICATION_SERVICE); Intent intent = new Intent(ctx, NotificationsActivity.class); intent.putExtra("isFromBadge", false); Notification notification = new Notification.Builder(ctx) .setContentTitle( ctx.getResources().getString(R.string.app_name)) .setContentText(message) .setSmallIcon(R.drawable.ic_launcher) .setLargeIcon(result).build(); // hide the notification after its selected notification.flags |= Notification.FLAG_AUTO_CANCEL; notificationManager.notify(1, notification); } catch (Exception e) { e.printStackTrace(); } } }