Ram*_*eya 15 android android-notifications google-cloud-messaging
您好,我使用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);
}
Run Code Online (Sandbox Code Playgroud)
通常情况下,图像来自网络(jpg,png等),而不是设备中的内容.上面的代码有效,但图像太大或太小.我想知道位图的最佳大小或宽高比,以便我可以提供合适的图像
Osc*_*udo 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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我需要知道新图像大小的因素.我知道在服务器中我有xxhdpi图像的因子为*3.00,我用它来获取全局因子:
public static float getImageFactor(Resources r){
DisplayMetrics metrics = r.getDisplayMetrics();
float multiplier=metrics.density/3f;
return multiplier;
}
Run Code Online (Sandbox Code Playgroud)
现在我必须调整图像大小并在通知图标中设置新位图:
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);
}
Run Code Online (Sandbox Code Playgroud)
这对我有用.我希望你能用它.
Ran*_*jit 11
如果我完全理解你的问题,那么下面的内容将对你有所帮助.
如果你已经有了图像..那么你可以设置它
.setLargeIcon(BitmapFactory.decodeResource(context.getResources(),R.drawable.ic_app_sky))
.setSmallIcon(R.drawable.ic_aaja_icon_red)
Run Code Online (Sandbox Code Playgroud)
总数:
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));
Run Code Online (Sandbox Code Playgroud)
您也可以从本教程中获得帮助..
Bitmap bitmap = BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length)
profileImage.setImageBitmap(Bitmap.createScaledBitmap(bitmap , 64, 64, false));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31227 次 |
| 最近记录: |