我喜欢使用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等),而不是设备中的内容。上面的代码有效,但图像太大或太小。我想知道位图的最佳大小或宽高比,以便我可以提供合适的图像
答案 0 :(得分:39)
我遇到了同样的问题。这就是我解决它的方法:
首先,您需要知道通知图标的最大大小,具体取决于设备分辨率。搜索,我发现了这个:
有两种方法:
我将向您解释我实施的第二个。
首先从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);
}
这项工作对我而言。我希望你能用它。
答案 1 :(得分:11)
如果我完全理解你的问题,那么下面的内容会对你有帮助。
如果您已经有了图片..那么您可以将其设置为
.setLargeIcon(BitmapFactory.decodeResource(context.getResources(),R.drawable.ic_app_sky))
.setSmallIcon(R.drawable.ic_aaja_icon_red)
总计:
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setNumber(COUNTER)
.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_app_sky))
.setSmallIcon(R.drawable.ic_icon_red)
.setAutoCancel(true)
.setContentTitle(pushCount > 1 ? "xxx" + pushCount : title)
.setContentText(pushCount > 1 ? "yyy" : message)
.setWhen(when)
.setContentIntent(PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT))
//.setDeleteIntent(PendingIntent.getBroadcast(context, 0, new Intent(Intent.ACTION_CLEAR_NOTIFICATION), PendingIntent.FLAG_CANCEL_CURRENT))
.setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE)
.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
您也可以从tutorial ..
获得帮助编辑:要更改位图大小..来自here..
Bitmap bitmap = BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length)
profileImage.setImageBitmap(Bitmap.createScaledBitmap(bitmap , 64, 64, false));
答案 2 :(得分:0)
这里要知道的另一件事是基本布局在这些图像上有边距,所以如果你试图模仿自定义布局中基本布局所看到的行为,请确保做类似的事情。有关详细信息,请查看notification_template_icon_group.xml。
这里我为你计算了数学像素(64dp - 12dp):
ldpi 48 - 9 = 39
mdpi 64 - 12 = 52
hdpi 96 - 18 = 78
xhdpi 128 - 24 = 104
xxhdpi 192 - 36 = 156