嗨,Iam使用GCM在
Android中实现推送通知.我正在尝试为通知设置图像,而不是默认的应用程序图标.我可以使用以下代码来实现这一点
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); }
通常,图像将来自网页(jpg,png等),而不是设备中的内容.上面的代码工作,但图像太大或太小.我想知道位图的最佳尺寸或宽高比,以便我可以提供适当的图像
解决方法
我有同样的问题.这是我如何解决的:
首先,您需要知道通知图标的最大尺寸,具体取决于设备分辨率.搜索,我发现这个:
> ldpi:48×48 px * 0.75
> mdpi:64×64 px * 1.00
> hdpi:96×96 px * 1.50
> xhdpi:128×128 px * 2.00
> xxhdpi:192×192 px * 3.00
有两种方法:
>一个在服务器中具有这些维度的一组图像,并根据您的设备分辨率获得它们.
>另一个在服务器中具有较大的图像,并根据您的设备分辨率在应用程序中调整其大小.
我会向你解释我实施的第二个.
首先从URL获取图像我使用它:
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; } }
然后我需要知道新图像大小的因素.我知道在服务器上我的xxhdpi图像的因子为* 3.00,我用它来获得全局因子:
public static float getImageFactor(Resources r){ DisplayMetrics metrics = r.getDisplayMetrics(); float multiplier=metrics.density/3f; return multiplier; }
现在我必须调整图像大小,并在通知图标中设置新的位图:
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); }
这工作对我来说我希望你能使用它.