У меня возникла проблема с правильной настройкой и отправкой уведомлений. Я прочитал новую спецификацию для уведомлений Lollipop 5.0 update
здесь: https://material.google.com/style/icons.html и https://material.google.com/patterns/notifications.html, и я понимаю, что значки должны быть white
для правильного отображения. Это прекрасно, и я полностью понимаю это, но я хочу, чтобы мое уведомление показывало изображение, которое, очевидно, не может быть белым. Однако меня действительно путает тот факт, что когда я пытаюсь сделать уведомление на своем телефоне, все работает нормально. Это выглядит примерно так:Изображение Facebook в виде сообщения с большим значком отображается на белом фоне как белый.
Однако на телефоне моего друга, это выглядит как белый квадрат, что-то вроде этого:
Это странно, потому что мы оба имеют тот же версия Android, версия 6.0.1. Вот код, который я использовал для отправки уведомлений:
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();
}
}
}
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
}
Если у кого есть какие-либо идеи, почему это происходит, некоторое представление будет высоко ценится. У меня Samsung SM-G900V (Samsung S5), а у моего друга есть телефон One plus One, если это помогает.
https://medium.com/exploring-android/android-n-introducing-upgraded-notifications-d4dd98a7ca92#.3xrmucoq2 –