GCM Push Notification Large Icon size

前端 未结 3 1328
南旧
南旧 2020-12-10 02:58

Hi Iam implementing Push Notifications in Android using GCM. I am trying to set an image for the notification instead of the default app icon. I am able to achieve this usin

3条回答
  •  庸人自扰
    2020-12-10 03:29

    I was having the same problem. This is how I solve it:

    First you need to know the max sizes of the notification icon depending of the device resolution. Searching, I found this:

    • ldpi: 48x48 px *0.75
    • mdpi: 64x64 px *1.00
    • hdpi: 96x96 px *1.50
    • xhdpi: 128x128 px *2.00
    • xxhdpi: 192x192 px *3.00

    There are 2 approach:

    • One is having a set of images in those dimension in the server, and get them depending of your device resolution.
    • The other one is having the larger image in the server and resize it in the app depending of your device resolution.

    I will explain to you the second one that I implement.

    First for get the Image from an URL I use this:

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

    Then I need to know the factor for the new image size. I know that in the server I have the xxhdpi image with a factor of *3.00, I use that for get the global factor:

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

    Now I have to resize the image size and set the new bitmap in the notification icon:

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

    This work for me. I hope you can use it.

提交回复
热议问题