8

Tôi gặp sự cố này khi tạo và gửi thông báo chính xác. Tôi đọc thông số kỹ thuật thiết kế thông báo Lollipop 5.0 update mới tại đây: https://material.google.com/style/icons.htmlhttps://material.google.com/patterns/notifications.html và tôi nhận thấy rằng Biểu tượng cần phải là white để hiển thị chính xác. Điều đó là tốt và tôi hoàn toàn hiểu điều đó, nhưng tôi muốn thông báo của tôi để hiển thị một hình ảnh, mà rõ ràng là không thể có màu trắng. Tuy nhiên, điều thực sự gây nhầm lẫn cho tôi là thực tế là khi tôi cố gắng hiển thị thông báo trên điện thoại của mình, mọi thứ đều hoạt động tốt. Nó trông giống như sau:Hình ảnh Facebook dưới dạng Thông báo Biểu tượng Lớn xuất hiện dưới dạng màu trắng trên các điện thoại khác nhau?

enter image description here

Tuy nhiên, trên điện thoại của bạn tôi, nó trông giống như một hình vuông màu trắng, một cái gì đó như thế này:

enter image description here

Đó là kỳ quặc vì cả hai chúng tôi có cùng một phiên bản Android, phiên bản 6.0.1. Dưới đây là đoạn code tôi sử dụng để gửi các thông báo:

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

cấu hình build.gradle:

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 
} 

Nếu ai có bất kỳ ý tưởng tại sao điều này xảy ra, một số cái nhìn sâu sắc sẽ được nhiều đánh giá cao. Tôi có một Samsung SM-G900V (Samsung S5) và bạn của tôi có một điện thoại One plus One nếu có.

+0

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

Trả lời

2

tôi nghĩ rằng bạn cần cung cấp các biểu tượng thông báo mới với nền trong suốt cho Android 6 & trên, vì vậy khi bạn thiết lập các biểu tượng trên thông báo như thế này:

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

Nếu bạn muốn hiển thị bức ảnh, có thể bạn có thể cố gắng sử dụng RemoteViews

+0

Hi, vâng tôi hoàn toàn hiểu rằng tôi cần một nền trong suốt, nhưng tôi không xem làm thế nào có thể với bức ảnh tôi muốn render. Tôi không có hình ảnh mà tôi muốn hiển thị dưới dạng bản vẽ. Bạn có thể xây dựng trên 'RemoteViews' không? – user1871869

+1

có thể bạn có thể theo liên kết này ví dụ về RemoteViews https://futurestud.io/tutorials/glide-loading-images-into-notifications-and-appwidgets. RemoteViews bạn cần tạo bố cục tùy chỉnh cho thông báo của mình – Sodiq

0

hy vọng nó sẽ giúp bạn:

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

Đối với Url tải:

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(); 
     } 
    } 
} 
Các vấn đề liên quan