3

我使用这样的代码成功修改了大图通知

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;
    }
}

这在 API < 24 上运行良好。在 API 24,25 和 26 上,甚至不调用此​​方法。看不到解释

4

2 回答 2

1

覆盖 getStandardView 后 - 您无法在 API>=24 上使用此方法。但是如果你调用createBigContentView,Android会调用getStandardView方法,你可以得到修改后的RemoteView。然后您需要将接收到的 RemoteView 设置为自定义大内容视图。

   if (Build.VERSION.SDK_INT >= 24) {
    try {
      RemoteViews remoteView = notificationBuilder.createBigContentView();
      if (remoteView != null) {
        notificationBuilder.setCustomBigContentView(remoteView);
      }
    } catch (Throwable t) {
      Log.e("","Cannot modify push notification layout.");
    }
  }
于 2018-02-22T19:29:14.277 回答
-1

好的,因为我无法在对您的评论中发布此内容,因此将其发布在这里作为答案。

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());

        }

    }

}

我基本上是下载图像,然后创建大图像通知。我在 25 或 26 中没有任何问题,并且已确认经过测试。

于 2017-10-04T05:34:45.843 回答