Custom Android Notification BigPicture with multiline summary doesn't work on API 25 and API 26

Viewed 535

I successfully modify big picture notification using such code

static class MyMultiLineBigPictureStyle extends Notification.BigPictureStyle{
    @NonNull
    @Override
    protected RemoteViews getStandardView(int layoutId) {
        RemoteViews ret =  super.getStandardView(layoutId);
        int id =  Resources.getSystem().getIdentifier("text", "id", "android");
        ret.setBoolean(id, "setSingleLine", false);
        ret.setInt(id, "setLines", 4);
        return ret;
    }
}

This works well on API < 24. On API 24,25 and 26 this method isn't even called. Can't see explanation for it

2 Answers

Ok as I can't post this in my comment to you so posting it here as answer.

public class SendNotificationAsyncTask extends AsyncTask<String, Void, Bitmap> {

    /*///////////////////////////////////////////////////////////////
    // MEMBERS
    *////////////////////////////////////////////////////////////////
    private static final String TAG = Globals.SEARCH_STRING + SendNotificationAsyncTask.class.getSimpleName();
    private Context mContext;
    private String mMessage;
    private String mImageUrl;
    private String mIdOfDetailToShow;


    /*///////////////////////////////////////////////////////////////
    // CONSTRUCTOR
    *////////////////////////////////////////////////////////////////
    public SendNotificationAsyncTask(Context context, String imageUrl, String message, String idToShow) {
        super();
        mContext = context;
        mMessage = message;
        mImageUrl = imageUrl;
        mIdOfDetailToShow = idToShow;

    }


    /*///////////////////////////////////////////////////////////////
    // BASECLASS OVERRIDES
    *////////////////////////////////////////////////////////////////
    @Override
    protected Bitmap doInBackground(String... params) {
        InputStream in;
        try {
            URL url = new URL(mImageUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setConnectTimeout(10000);
            connection.setReadTimeout(10000);
            connection.setDoInput(true);
            connection.setInstanceFollowRedirects(true);
            connection.connect();
            in = connection.getInputStream();
            Bitmap myBitmap = BitmapFactory.decodeStream(in);

            return myBitmap;

        } catch (MalformedURLException e) {
            A35Log.e(TAG, e.getMessage());

        } catch (IOException e) {
            A35Log.e(TAG, e.getMessage());

        }

        return null;

    }
    @Override
    protected void onPostExecute(Bitmap result) {
        super.onPostExecute(result);

        try {
            NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);

            Intent intent = new Intent(mContext, SplashScreenActivity.class);
            intent.putExtra(Globals.INTENT_KEYS.KEY_FROM_BADGE_ACCESS, true);
            intent.putExtra(Globals.INTENT_KEYS.KEY_ID_OF_DETAIL_TO_OPEN, mIdOfDetailToShow);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

            PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, intent, PendingIntent.FLAG_ONE_SHOT);

            Notification notification = new Notification.Builder(mContext)
                    .setContentTitle(mContext.getResources().getString(R.string.app_name))
                    .setContentText(mMessage)
                    .setSmallIcon(R.drawable.logo_main_white)
                    .setContentIntent(pendingIntent)
                    .setStyle(new Notification.BigPictureStyle().bigPicture(result))
                    .setLargeIcon(result).build();

            // hide the notification after its selected
            notification.flags |= Notification.FLAG_AUTO_CANCEL;
            notificationManager.notify(1, notification);

        } catch (Exception e) {
            A35Log.e(TAG, e.getMessage());

        }

    }

}

I basically download the image and then create the large image notification. I have not had any issues in 25 or 26 and it is confirmed tested.

Related