Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Icono grande ¿El mapa de bits aparece como un cuadro blanco en la notificación?

Estoy teniendo este problema donde yo genera un Bitmap de Bitmap de una URL que utilizo en mi notificación. Sin embargo, en mi teléfono, el Bitmap aparece como un pequeño cuadrado blanco. Miré en él y encontré muchos postes como así que hablar de él: Icono que no exhibe en la notificación: el cuadrado blanco demostrado en lugar de otro

Y sé con seguridad mi Small Icon para la notificación de hecho es transparente. Sin embargo, para el Large Icon , me doy cuenta de que el Large Icon no puede ser transparente, ya que en realidad es un Bitmap que genera desde una URL. ¿Cómo puedo solucionar esto y asegurarse de que la imagen se hace correctamente en lugar de tener el Large Icon aparece como un cuadrado blanco? Aquí está mi intento:

  • Cierre de ByteArrayOutputStream en una aplicación de Android
  • Detectar AC (encendido / apagado) y Ventana (abrir / cerrar) de CAR utilizando OBD
  • ¿Cuándo borrar el directorio caché de Android?
  • Icono personalizado en la barra de herramientas de Android
  • Obtener el protocolo Wi-Fi (802.11a / b / g / n) mediante programación
  • ¿Cómo evitar las filtraciones de Eclipse en XServer al editar archivos XML de Android?
  • NotificationService.java:

      NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context) .setContentTitle(getString(R.string.app_name)) .setContentText(remoteMessage.getNotification().getBody()) .setTicker(remoteMessage.getFrom() + " has responded!") .setLargeIcon(AndroidUtils.getBitmapFromURL(remoteMessage.getNotification().getIcon())) .setAutoCancel(true) .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) .setStyle(new NotificationCompat.BigTextStyle().bigText(remoteMessage.getNotification().getBody())) .setSmallIcon(R.drawable.ic_tabs_notification_transparent); 

    AndroidUtils.java:

     public static Bitmap getBitmapFromURL(String userId) { try { URL imgUrl = new URL("https://graph.facebook.com/" + userId + "/picture?type=large"); InputStream in = (InputStream) imgUrl.getContent(); Bitmap bitmap = BitmapFactory.decodeStream(in); Bitmap output; Rect srcRect; if (bitmap.getWidth() > bitmap.getHeight()) { output = Bitmap.createBitmap(bitmap.getHeight(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); srcRect = new Rect((bitmap.getWidth()-bitmap.getHeight())/2, 0, bitmap.getWidth()+(bitmap.getWidth()-bitmap.getHeight())/2, bitmap.getHeight()); } else { output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getWidth(), Bitmap.Config.ARGB_8888); srcRect = new Rect(0, (bitmap.getHeight()-bitmap.getWidth())/2, bitmap.getWidth(), bitmap.getHeight()+(bitmap.getHeight()-bitmap.getWidth())/2); } Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); float r; if (bitmap.getWidth() > bitmap.getHeight()) { r = bitmap.getHeight() / 2; } else { r = bitmap.getWidth() / 2; } paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawCircle(r, r, r, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap, srcRect, rect, paint); return output; } catch (IOException e) { FirebaseCrash.report(e); return null; } 

    Imagen que muestra mi problema:

    Introduzca aquí la descripción de la imagen

    EDIT: archivo Build.gradle que muestra:

     apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.1" compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } defaultConfig { applicationId '<ID>' multiDexEnabled true minSdkVersion 21 targetSdkVersion 23 versionCode 12 versionName ".12" signingConfig signingConfigs.Tabs } buildTypes { release { minifyEnabled false shrinkResources false zipAlignEnabled true debuggable false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.Tabs } debug { applicationIdSuffix ".debug" debuggable true minifyEnabled false signingConfig signingConfigs.Tabs } } //DatabaseReference stuff packagingOptions { exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE-FIREBASE.txt' exclude 'META-INF/NOTICE' } dexOptions { javaMaxHeapSize "4g" } productFlavors { } } 

  • Anular la animación para notifyItemChanged en RecyclerView.Adapter
  • Clickable CardView dentro de NestedScroll no activa el desplazamiento
  • Cambiar tamaño de Android-Seekbar?
  • Preguntas relacionadas con la seguridad y el diseño de la facturación en la aplicación
  • Colorear la barra de estado de Android en Nav Drawer
  • Mezcla de cordova y actividades nativas en Android
  • 8 Solutions collect form web for “Icono grande ¿El mapa de bits aparece como un cuadro blanco en la notificación?”

     try { NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this); mBuilder.setSmallIcon(getNotificationIcon()); Bitmap icon = BitmapFactory.decodeResource(CXGcmListenerService.this.getResources(), R.drawable.ic_launcher); mBuilder.setLargeIcon(icon); //Define sound URI Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); mBuilder.setContentIntent(pendingIntent); mBuilder.setContentText(msg); mBuilder.setStyle(new NotificationCompat.BigTextStyle() .bigText(msg)); mBuilder.setContentTitle(getString(R.string.app_name)); mBuilder.getNotification().flags |= Notification.FLAG_AUTO_CANCEL; mBuilder.setAutoCancel(true); mBuilder.setSound(soundUri); //This sets the sound to play Intent intent = new Intent(CXGcmListenerService.this, CXMainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); PendingIntent notificationIntent = PendingIntent.getActivity(this, 0, intent, 0); mBuilder.setContentIntent(notificationIntent); NotificationManager notifyManager = (NotificationManager) CXGcmListenerService.this.getSystemService(Context.NOTIFICATION_SERVICE); NOTIFICATION_ID++; notifyManager.notify("" + System.currentTimeMillis(), NOTIFICATION_ID, mBuilder.build()); } catch (Resources.NotFoundException e) { CXLog.e(TAG, "" + e.getLocalizedMessage(), e); } 

    Intente esto para obtener el icono en la notificación.

    Usted puede utilizar el icono diferente para la diversa versión:

     int bigIcon = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ? R.drawable.logo_who_is_not_white: R.drawable.logo_who_is_in_whit_tint; 

    Creo que han estado descargando la imagen desde una dirección URL correcta ?. Por lo tanto, por favor, coloque un Asynctask para descargar la imagen de la url y luego utilice el constructor de notificaciones para mostrar la notificación como esta publicación de SO: https://stackoverflow.com/a/24866080/6452886

    Lilipop tiene este problema existe, Usted acaba de mirar otro teléfono antes de Lolipop que no tienen ningún problema.

    Por favor remítase a los siguientes enlaces

    https://material.google.com/style/icons.html

    https://developer.android.com/about/versions/android-5.0-changes.html

    De lo contrario puede cambiar el SDK compilado

    Hay un cambio en la notificación de Lollipop y más tarde en los niveles de API de Android. Para anular este problema, puede seguir estos pasos:

    Way1: Cambia targetSdkVersion de 23 a 19 en build.gradle de tu módulo de aplicación. Esto resolverá el problema para eso.

    Nota: Tal vez esta solución creará problema en su sistema de compilación (prefiero que no debería ir con esta forma, pero puede comprobar su problema de esta manera)

    Way2: Cambie su icono de notificación con un icono en blanco y negro. Dado que el generador de notificaciones no admite los iconos de color desde el nivel API de lollipop.

    Manera de obtener icono en blanco y negro en Android Studio:

    1. Haga clic con el botón derecho del ratón en la carpeta Desplegable> Agregar recurso de imagen (cualquier carpeta de recursos debe hacer) Introduzca aquí la descripción de la imagen

    2. Haga clic en Icono de notificación en la lista desplegable superior (por defecto es el icono del lanzador) Introduzca aquí la descripción de la imagen

    3. Seleccione Imagen> Examinar a imagen> haga clic en Aceptar Introduzca aquí la descripción de la imagen

    Esto es normal ya que el Lollipop SDK (API 21 – Ver 5.0.1) sólo permite este tipo de esquema de color

    O puede generar desde aquí: http://romannurik.github.io/AndroidAssetStudio/icons-notification.html

    Creo que el problema es con el tamaño de la imagen, la barra de estado iconos tamaño sigue como abajo –

     ldpi - 18 x 18 px mdpi - 24 x 24 px hdpi - 36 x 36 px xhdpi - 48 x 48 px 

    También puede echar un vistazo a este desarrollador doc

    Es necesario cambiar la dimensión del mapa de bits recibido a los tamaños mencionados anteriormente y debería funcionar.

    Bueno, porque Google ha cambiado el estilo de notificación en la API 21+, y recomendamos usar el icono de notificación en blanco

    Aunque puedes usar el icono de la silueta en 21+ y icono más antiguo en todos los demás dispositivos, Algo como abajo

     private int getNotificationIcon() { boolean icon = (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP); return icon ? R.drawable.silhouette : R.drawable.ic_launcher; } 

    Y aquí está el código del constructor de la notificación real:

     Notification builder = new Notification.Builder(context) .setSmallIcon(getNotificationIcon()) .build(); 

    Por la documentación setColor ()

    Parámetros

     argb -The accent color to use 

    Está pasando en 2, que no es un color ARGB válido, por lo tanto, el color de fondo de su pequeño icono no aparece correctamente. En su lugar, elija un color ARGB válido.

    Si tiene un recurso de color que desea utilizar, puede utilizar código como

     .setColor(context.getResources().getColor(R.color.notification_color)) 

    Además, tenga en cuenta que el Android 5.0 cambia de estado:

    Actualizar o eliminar activos que implican color. El sistema ignora todos los canales no alfa en los iconos de acción y en el icono de notificación principal. Usted debe asumir que estos iconos serán alfa-solamente. El sistema dibuja los iconos de notificación en blanco y los iconos de acción en gris oscuro.

    Su icono pequeño debe ser totalmente blanco y transparente – puede utilizar herramientas como el generador de iconos de notificación para generar un icono apropiado.

    O puede probar esto:

     int icon = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ? R.drawable.your_logo_for_Kitkat : R.mipmap.your_logo_for_Lolipop_and_uper_version; NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) .setSmallIcon(icon) .setContentTitle(remoteMessage.getData().get("title")) .setContentText(remoteMessage.getData().get("shortDescription")) .setAutoCancel(true) .setSound(defaultSoundUri) .setColor(Color.RED) .setStyle(notiStyle) .setContentIntent(pendingIntent); 

    Para la carga de imagen Url:

      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(); } } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.