Tamaño grande del icono de la notificación del empuje de GCM

Hola estoy implementando notificaciones push en Android usando GCM. Estoy intentando establecer una imagen para la notificación en lugar del icono predeterminado de la aplicación. Puedo conseguir esto usando el código siguiente

if(extras.getString("src") != null){ URL url = new URL(extras.getString("src")); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.connect(); InputStream input = connection.getInputStream(); Bitmap large_icon = BitmapFactory.decodeStream(input); mBuilder.setLargeIcon(large_icon); } 

Normalmente la imagen será de la web (jpg, png etc) y no algo en el dispositivo. El código anterior funciona, pero la imagen es demasiado grande o demasiado pequeña. Me gustaría saber el tamaño óptimo o la relación de aspecto para el mapa de bits para que pueda proporcionar una imagen adecuada

Estaba teniendo el mismo problema. Así es como lo soluciono:

En primer lugar, debe conocer los tamaños máximos del icono de notificación en función de la resolución del dispositivo. Buscando, encontré esto:

  • Ldpi: 48×48 px * 0,75
  • Mdpi: 64 x 64 px * 1,00
  • Hdpi: 96×96 px * 1.50
  • Xhdpi: 128 x 128 px * 2.00
  • Xxhdpi: 192 x 192 px * 3.00

Hay 2 enfoque:

  • Uno es tener un conjunto de imágenes en esas dimensiones en el servidor, y obtener en función de la resolución de su dispositivo.
  • El otro es tener la imagen más grande en el servidor y cambiar su tamaño en la aplicación dependiendo de la resolución de su dispositivo.

Te explicaré el segundo que implemento.

Primero para obtener la imagen de una URL que uso esto:

 public Bitmap getBitmapFromURL(String strURL) { try { URL url = new URL(strURL); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.connect(); InputStream input = connection.getInputStream(); Bitmap myBitmap = BitmapFactory.decodeStream(input); return myBitmap; } catch (IOException e) { e.printStackTrace(); return null; } } 

Entonces necesito saber el factor para el nuevo tamaño de la imagen. Sé que en el servidor tengo la imagen xxhdpi con un factor de * 3.00, lo utilizo para obtener el factor global:

 public static float getImageFactor(Resources r){ DisplayMetrics metrics = r.getDisplayMetrics(); float multiplier=metrics.density/3f; return multiplier; } 

Ahora tengo que cambiar el tamaño del tamaño de la imagen y establecer el nuevo mapa de bits en el icono de notificación:

 Bitmap bmURL=getBitmapFromURL(largeIcon); float multiplier= getImageFactor(getResources()); bmURL=Bitmap.createScaledBitmap(bmURL, (int)(bmURL.getWidth()*multiplier), (int)(bmURL.getHeight()*multiplier), false); if(bmURL!=null){ mBuilder.setLargeIcon(bmURL); } 

Este trabajo para mí. Espero que puedas usarlo.

Si he entendido su problema perfectamente, a continuación, lo siguiente le ayudará.

Si ya tienes la imagen .. entonces puedes configurarla como

  .setLargeIcon(BitmapFactory.decodeResource(context.getResources(),R.drawable.ic_app_sky)) .setSmallIcon(R.drawable.ic_aaja_icon_red) 

El total:

  NotificationCompat.Builder builder = new NotificationCompat.Builder(context); builder.setNumber(COUNTER) .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_app_sky)) .setSmallIcon(R.drawable.ic_icon_red) .setAutoCancel(true) .setContentTitle(pushCount > 1 ? "xxx" + pushCount : title) .setContentText(pushCount > 1 ? "yyy" : message) .setWhen(when) .setContentIntent(PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT)) //.setDeleteIntent(PendingIntent.getBroadcast(context, 0, new Intent(Intent.ACTION_CLEAR_NOTIFICATION), PendingIntent.FLAG_CANCEL_CURRENT)) .setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE) .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)); 

También puede obtener ayuda de este tutorial ..

EDIT: Para cambiar un tamaño de mapa de bits … tomado de aquí ..

 Bitmap bitmap = BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length) profileImage.setImageBitmap(Bitmap.createScaledBitmap(bitmap , 64, 64, false)); 

La otra cosa aquí para saber es que los diseños de base tienen márgenes indicados en estas imágenes, así que si usted está tratando de imitar el comportamiento visto por los diseños de la base en un diseño personalizado asegúrese de hacer algo similar. Chequea notification_template_icon_group.xml para más detalles.

Aquí he calculado la matemática a píxeles para usted (64dp – 12dp):

 ldpi 48 - 9 = 39 mdpi 64 - 12 = 52 hdpi 96 - 18 = 78 xhdpi 128 - 24 = 104 xxhdpi 192 - 36 = 156 
  • Android: errores de difusión no ordenados con GCM
  • Las notificaciones push de GCM causan 502 Bad Gateway
  • GCM no despertar dispositivo
  • GCM de Android enviado correctamente pero no recibido en algunos dispositivos
  • Registro de GCM pero no recibe mensajes en pre 4.0.4. Dispositivos
  • No se puede iniciar el servicio Intención {act = com.google.android.c2dm.intent.REGISTRATION (tiene extras)} U = 0: no encontrado
  • Android - enviar sms en un hilo separado
  • PHP del servidor GCM - Error 401 no autorizado
  • GCM de Android GCMRegistrar checkManifest (this) - Error de archivo de manifiesto
  • Simulación de GCM de Android
  • Cómo desarrollar el backend de Google App Engine con Android Studio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.