8

Bildirimleri doğru şekilde oluşturmak ve göndermek için bu sorunu yaşıyorum. https://material.google.com/style/icons.html ve https://material.google.com/patterns/notifications.html numaralı yeni Lollipop 5.0 update bildirimi tasarım belirtimini okudum ve düzgün görüntülenebilmesi için Simgelerin white olması gerektiğini farkettim. Bu iyi ve ben bunu tamamen anlıyorum, ancak bildirimimin açık bir şekilde beyaz olamayacak bir resim göstermesini istiyorum. Ancak, gerçekten kafamı karıştıran şey, bildirimi telefonuma koymaya çalıştığımda, her şeyin yolunda gitmesi. o, beyaz bir kare gibi şuna benzer,Büyük Simge Bildirimi olarak Facebook resmi farklı telefonlarda beyaz olarak görünüyor mu?

enter image description here

Ancak arkadaşımın telefonda: Bu şuna benzer ikimiz de aynı çünkü

enter image description here

Tuhaf Android sürümü, sürüm 6.0.1.

private class NotificationPicture extends AsyncTask<String, Void, Bitmap> { 

     Context context; 
     String userId; 
     String postId; 
     String name; 
     String notificationBody; 
     String from; 

     public NotificationPicture(Context context) { 
      super(); 
      this.context = context; 
     } 

     @Override 
     protected Bitmap doInBackground(String... params) { 
      userId = params[0]; 
      postId = params[1]; 
      name = params[2]; 
      notificationBody = params[3]; 
      from = params[4]; 
      try { 
       URL url = new URL("https://graph.facebook.com/" + userId + "/picture?type=large"); 
       HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
       connection.setDoInput(true); 
       connection.connect(); 
       InputStream in = connection.getInputStream(); 
       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; 
      } 
     } 

     @Override 
     protected void onPostExecute(Bitmap result) { 

      super.onPostExecute(result); 
      try { 
       NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context) 
         .setContentTitle(getString(R.string.app_name)) 
         .setContentText(notificationBody) 
         .setTicker(from + " has responded!") 
         .setAutoCancel(true) 
         .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) 
         .setStyle(new NotificationCompat.BigTextStyle().bigText(notificationBody)) 
         .setSmallIcon(R.drawable.ic_tabs_notification_2) 
         .setLargeIcon(result); 
       Intent resultIntent = new Intent(context, CommentsActivity.class); 
       setupPostDetails(notificationBuilder, resultIntent, postId, userId, name, context); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

build.gradle yapılandırmaları:

compileSdkVersion 23 
buildToolsVersion "23.0.1" 
compileOptions { 
    sourceCompatibility JavaVersion.VERSION_1_7 
    targetCompatibility JavaVersion.VERSION_1_7 
} 
defaultConfig { 
    applicationId 'com.schan.tabs' 
    multiDexEnabled true 
    minSdkVersion 19 
    targetSdkVersion 23 
    versionCode 16 
    versionName "1.16" 
    signingConfig signingConfigs.Tabs 
} 

herkes bu neden oluyor herhangi bir fikir varsa, bazı fikir çok takdir İşte bildirim göndermek için kullanılan koddur. Ben bir Samsung SM-G900V (Samsung S5) var ve bu yardımcı olursa arkadaşım bir artı bir telefon var.

+0

https://medium.com/exploring-android/android-n-introducing-upgraded-notifications-d4dd98a7ca92#.3xrmucoq2 –

cevap

2

Ben üst Android 6 & için şeffaf arka plan ile yeni bildirim simgesini sağlamak ihtiyacım olduğunu düşünüyorum, böyle bildiriminde simgeyi ayarladığınızda:

.setSmallIcon(android.os.Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP ? R.drawable.ic_notif_with_transparent_bg : R.drawable.ic_notif_current) 

Fotoğrafı göstermek istiyorsanız, belki RemoteViews

+0

Merhaba, evet Ben tamamen şeffaf bir arka plan ihtiyaç anlamak ama yok render etmek istediğim fotoğrafın nasıl mümkün olduğunu görün. Saklanılabilir olarak saklanmak istediğim görüntü bende yok. RemoteViews hakkında ayrıntılı bilgi verebilir misiniz? – user1871869

+1

belki bu bağlantıyı takip edebilirsin, örneğin RemoteViews https://futurestud.io/tutorials/glide-loading-images-into-notifications-and-appwidgets. İhtiyacınız olan RemoteViews, bildirimleriniz için özel düzen oluşturuyor – Sodiq

0

Umut kullanmayı deneyebilirsiniz size yardım edebilir:

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); 

URL Yük için:

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(); 
     } 
    } 
}