15

で複数行のメッセージを表示する方法を取得プッシュ通知のmessageのみ一行で、私はBigPictureStyleベース(通知スタイルの両方)とmultiple linesでそれを期待していたのに対し。Firebaseプッシュ通知 - 通知

のスクリーンショットを参照してください。このイメージでは、"Hello from Firebase Cloud Messaging"と表示されていますが、これは単一行に収まるためです。

しかし、私は「Firebaseクラウドメッセージングからこんにちは再びFirebaseクラウドメッセージングからこんにちは、」を表示しようとしている場合、実際には、であっても、私はこののように末尾に3つのドットsingle line onlyにメッセージを取得しています...

enter image description hereここ

コードpartを必要とする、私が使用しています:

NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
       .setLargeIcon(image)/*Notification icon image*/ 
       .setSmallIcon(R.mipmap.ic_launcher) 
       .setContentTitle(messageTitle) 
       .setContentText(messageBody) 
       .setStyle(new NotificationCompat.BigPictureStyle() 
         .bigPicture(image) 
         .setBigContentTitle(messageTitle) 
         .setSummaryText(Html.fromHtml(messageBody) 
         .toString()))/*Notification with Image*/ 
       .setAutoCancel(true) 
       .setSound(defaultSoundUri) 
       .setContentIntent(pendingIntent); 

注:

enter image description here

:、私はビッグ画像
(ベース/シンプルなプッシュ通知)することなく、メッセージを送信午前たび

このスクリーンショットを参照してください同じ問題、私が直面しています

したがって、の関心事はです。複数のメッセージを表示する方法通知で?

+0

これをチェックアウト:https://stackoverflow.com/a/45415413/4026792 – Thomas

+0

私は、コードを持っているあなたは@Dus答えを使用して複数のラインを表示することができます...しかしbigPictureSyleと、それは常に単一の行 –

+0

を持っていますテキストと一緒に大きな画像を表示するfirebase通知用。ロジックは、私はアプリケーションにfcm通知で通知ID番号を送信するために使用されます。 'onMessageReceived'アプリケーションは、そのID番号を送信することによって自分のWebアプリケーションと通信し、Webアプリケーションに存在する通知IDに関連するデータをダウンロードし、通知ビルダーに表示します。もしあなたが望むなら、あなたが参照できるようにここにコードを掲載することができます。 –

答えて

6

ほとんどの場合、bigTextプロパティを設定するだけです。

NotificationCompat.Builder notificationBuilder = 
      new NotificationCompat.Builder(this) 
        .setSmallIcon(R.mipmap.ic_launcher) 
        .setAutoCancel(true); 

    NotificationCompat.BigTextStyle bigTextStyle = new NotificationCompat.BigTextStyle(); 
    bigTextStyle.setBigContentTitle("Title"); 
    bigTextStyle.bigText("Lorem ipsum dolor sit amet, consectetur adipiscing elit," + 
      " sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. " + 
      "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris " + 
      "nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in."); 

    notificationBuilder.setStyle(bigTextStyle); 

    NotificationManager mNotifyMgr = (NotificationManager) 
      getSystemService(NOTIFICATION_SERVICE); 
    mNotifyMgr.notify(1, notificationBuilder.build()); 

multiline

+0

だから大きなイメージはどうですか? – Sophie

+0

@ソフィー申し訳ありませんが、私はあなたがフルテキストで大きな画像を追加できるとは思わない。 – Dus

2

あなたは@Dus答えを使用して複数のラインを表示することができます...しかしbigPictureSyleと、それは常にsetSummaryText方法や他のオプションでは、単一の行を持つことになり、あなたのあたりのようRemoteViewを作成し、UIを実装することですRemoteViewのために必要な設計

あなたは独自のレイアウトを使用する必要がありますthis

3

を参照してください。

Builder builder = new Builder(context); 
builder.setSmallIcon(R.drawable.star_white) 
builder.setAutoCancel(true) 
builder.setContentIntent(pendingIntent); 
builder.setPriority(NotificationCompat.PRIORITY_MAX); 

RemoteViews remoteViewsBig = new RemoteViews(context.getPackageName(), R.layout.notification_big); 
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.notification_small); 
remoteViewsBig.setImageViewBitmap(R.id.banner, bitmap); 

remoteViewsBig.setTextViewText(R.id.button, data.getButtonText()); 
remoteViews.setTextViewText(R.id.button, data.getButtonText()); 

remoteViewsBig.setTextViewText(R.id.text_title, data.getTitle()); 
remoteViews.setTextViewText(R.id.text_title, data.getTitle()); 

remoteViewsBig.setTextViewText(R.id.text_content, data.getContent()); 
remoteViews.setTextViewText(R.id.text_content, data.getContent()); 

builder.setCustomContentView(remoteViews); 
builder.setCustomBigContentView(remoteViewsBig); 

NotificationManager notificationManager = 
      (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
notificationManager.notify(notificationId, builder.build()); 

とXMLファイル:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:tools="http://schemas.android.com/tools" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:background="@color/custom_blue_gray_800" 
       android:orientation="horizontal" 
    > 

    <ImageView 
     android:layout_width="44dp" 
     android:layout_height="44dp" 
     android:layout_gravity="center" 
     android:src="@mipmap/ic_launcher" 
     /> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="12dp" 
     android:layout_marginRight="12dp" 
     android:layout_weight="1" 
     android:gravity="center_vertical" 
     android:orientation="vertical" 
     android:padding="8dp" 
     > 

     <TextView 
      android:id="@+id/text_title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textColor="@android:color/white" 
      android:textSize="16sp" 
      tools:text="Title" 
      /> 

     <TextView 
      android:id="@+id/text_content" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textColor="@android:color/darker_gray" 
      android:textSize="14sp" 
      tools:text="text\ntext\ntext" 
      /> 

    </LinearLayout > 

    <Button 
     android:id="@+id/button" 
     android:layout_width="wrap_content" 
     android:layout_height="36dp" 
     android:layout_gravity="center_vertical" 
     android:background="@drawable/button_main" 
     android:text="Click" 
     android:textColor="@android:color/white" 
     android:textSize="12sp" 
     /> 

</LinearLayout > 

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:app="http://schemas.android.com/apk/res-auto" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:background="@color/custom_blue_gray_800" 
       android:orientation="vertical" 
       android:paddingLeft="12dp" 
       android:paddingRight="12dp" 
       android:paddingBottom="12dp" 
    > 

    <include layout="@layout/notification_small" /> 

    <ImageView 
     android:id="@+id/banner" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:adjustViewBounds="true" 
     android:scaleType="centerCrop" 
     /> 


</LinearLayout > 
4

はこれを試すには: -

NotificationCompat.Builder builder = new NotificationCompat.Builder(
     context); 
Notification notification = builder.setContentIntent(contentIntent) 
     .setSmallIcon(icon).setTicker(appname).setWhen(0) 
     .setAutoCancel(true).setContentTitle(appname) 
     .setStyle(new NotificationCompat.BigTextStyle().bigText(message)) 
     .setContentText(message).build(); 

notificationManager.notify(0, notification); 
2

私はこれがあなたに使用されている願っています。

NotificationCompat.Builder builder = new NotificationCompat.Builder(
      context); 
    Notification notification = builder.setContentIntent(contentIntent) 
      .setSmallIcon(icon).setTicker(appname).setWhen(0) 
      .setAutoCancel(true).setContentTitle(appname) 
      .setStyle(new NotificationCompat.BigTextStyle().bigText(message)) 
      .setContentText(message).build(); 

    notificationManager.notify(0, notification); 

このリンクを参照してください:この チェックDisplay Notification in multiline

ありがとうございました...

+0

大きな画像はどうですか? – Sophie

+0

こんにちは、Sophieは次のコードを使用してリンクを参照しています.... –

+0

通知notif =新しいNotification.Builder(mContext) .setContentTitle( "新しい写真" + sender.toString()) .setContentText(件名) 。 setSmallIcon(R.drawable.new_post) .setLargeIcon(aBitmap) .setStyle(新しいNotification.BigPictureStyle( .bigPicture(aBigBitmap)) 。ビルド(); –

0

これは、私は大きな画像や通知で一部のマルチラインテキストを表示するために管理する方法です。これは私のプロジェクトの作業コードです。

fcmには2種類のfcmメッセージがあります。 Display MessagesおよびData Messages。また、フォアグラウンドとバックグラウンドでfcm通知を処理するのにData Messagesを使用しています。

/** 
* Created by Mohammed Farhan on 01-08-2017. 
*/ 

public class MyFirebaseMessagingService extends FirebaseMessagingService 
{ 

    private static final String TAG = "MyFirebaseMsgService"; 
    private AppAuth auth; 

    @Override 
    public void onMessageReceived(RemoteMessage remoteMessage) 
    { 
    } 




     /*To check if remoteMessage is empty, if not empty then read the id from "title" field*/ 
     if (remoteMessage.getData().size() > 0) 
     { 
      Map<String, String> data = remoteMessage.getData(); 
      String title = data.get("title"); 
      sendNotification(title); 
      Log.d(TAG, title.toString()); 
     } 

    } 


    private void sendNotification(String title) 
    { 


     final String id = title; 

     /* Here DataFromServer is custom method, used to sync data from my server. It has interface method to listen it when data sync and adding it to local sql completes*/ 
     DataFromServer dataFromServer = new DataFromServer(this); 
     dataFromServer.setDataLoadCompleteListener(new DataLoadCompleteListener() 
     { 
      @Override 
      public void dataLoadComplete() 
      { 

      /*AppNotificationDAO is a class which has many DAO(Data Access Object) method. I have used DAO to make ease in saving,querying data from local sql*/ 
       AppNotificationDAO appNotificationDAO = new AppNotificationDAO(MyFirebaseMessagingService.this); 

       /*getAppNotificationByID is DAO method which does server communication and fetch data from it based on Id(Here its notificationId)*/ 
       AppNotification appNotification = appNotificationDAO.getAppNotificationByID(Long.valueOf(id)); 
       if (appNotification != null) 
       { 
        if (appNotification.getPhoto().equalsIgnoreCase("NA")) 
        { 
        /* photo is a field in my AppNotification class and getPhoto() is getter and appNotification.getPhoto() returns the value stored in it. Here am using it to save url of image related to notification in my web app*/ 

         /*if url is not present then below method displays just a text as notification*/ 
         showBigTextStyleNotification(appNotification); 
        } 
        else 
        { 


        /*if there is url then am running asyncTask to get bitmap of that image and show it in notification tray along with text. Below method does that*/ 
         new showBigPictureStyleNotification(MyFirebaseMessagingService.this, 
           appNotification.getMessage(), 
           Links.NOTIFICATION_IMAGE + "/" + appNotification.getPhoto(), appNotification) 
           .execute(); 

           /* am passing some variables inside above methods, and Links is a class where have defined some strings (links) to my webapp*/ 
        } 
       } 
      } 
     }); 
     dataFromServer.getAppNotificationFromServer(Long.valueOf(id)); 




    } 

    private void displayNotification(AppNotification appNotification) 
    { 
     Intent intent = new Intent(MyFirebaseMessagingService.this, NotificationListActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     PendingIntent pendingIntent = PendingIntent.getActivity(MyFirebaseMessagingService.this, 
       0, intent, PendingIntent.FLAG_ONE_SHOT); 

     Uri notificationSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

     NotificationCompat.Builder builder = new NotificationCompat.Builder(this); 
     builder.setContentTitle("KSP_PQRS"); 
     builder.setContentText(appNotification.getSubject()); 
     builder.setContentIntent(pendingIntent); 
     builder.setSmallIcon(R.drawable.notification); 
     builder.setSound(notificationSoundUri); 
     builder.build(); 

     NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
     notificationManager.notify(100, builder.build()); 
    } 

    private void showBigTextStyleNotification(AppNotification appNotification) 
    { 
     Bitmap icon1 = BitmapFactory.decodeResource(getResources(), 
       R.drawable.police_logo); 

     android.support.v4.app.NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
       this).setAutoCancel(true) 
       .setContentTitle(appNotification.getSubject()) 
       .setSmallIcon(R.drawable.police_logo) 
       .setLargeIcon(icon1) 
       .setContentText(appNotification.getMessage()); 

     NotificationCompat.BigTextStyle bigText = new NotificationCompat.BigTextStyle(); 
     bigText.bigText(appNotification.getMessage()); 
     bigText.setBigContentTitle(appNotification.getSubject()); 
     bigText.setSummaryText(getResources().getString(R.string.app_name)); 
     mBuilder.setStyle(bigText); 
     mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)); 
     mBuilder.setPriority(NotificationCompat.PRIORITY_MAX); 

     // Creates an explicit intent for an Activity in your app 
     Intent resultIntent; 
     if (appNotification.getType().equalsIgnoreCase("GEN")) 
     { 
      resultIntent = new Intent(this, NotificationListActivity.class); 
     } 
     else 
     { 
      resultIntent = new Intent(this, MainActivity.class); 
     } 

     TaskStackBuilder stackBuilder = TaskStackBuilder 
       .create(this); 
     stackBuilder.addParentStack(MainActivity.class); 
     stackBuilder.addNextIntent(resultIntent); 
     PendingIntent resultPendingIntent = stackBuilder 
       .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 
     mBuilder.setContentIntent(resultPendingIntent); 

     NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); 
     mNotificationManager.notify(((int) appNotification.getId()) + 1000, mBuilder.build()); 
    } 

    private class showBigPictureStyleNotification extends AsyncTask<String, Void, Bitmap> 
    { 
     private Context mContext; 
     private String title, message, imageUrl; 
     AppNotification appNotification; 

     showBigPictureStyleNotification(Context context, String message, String imageUrl, AppNotification appNotification) 
     { 
      super(); 
      this.mContext = context; 
      this.title = getResources().getString(R.string.app_name); 
      this.message = message; 
      this.imageUrl = imageUrl; 
      this.appNotification = appNotification; 
     } 

     @Override 
     protected Bitmap doInBackground(String... params) 
     { 
      InputStream in; 
      try 
      { 
       auth = new AppAuthDAO(mContext).getAppAuth(); 
       byte[] toEncrypt = (auth.getUsername() + ":" + auth.getPassword() + ":" + auth.getDeviceId()).getBytes(); 
       String encryptedCredentials = Base64.encodeToString(toEncrypt, Base64.NO_WRAP); 

       URL url = new URL(this.imageUrl); 
       HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
       connection.setDoInput(true); 
       connection.setRequestProperty("Authorization", "Basic " + encryptedCredentials); 
       connection.connect(); 
       in = connection.getInputStream(); 
       Bitmap myBitmap = BitmapFactory.decodeStream(in); 
       return myBitmap; 
      } 
      catch (IOException e) 
      { 
       e.printStackTrace(); 
      } 
      return null; 
     } 

     @TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
     @Override 
     protected void onPostExecute(Bitmap result) 
     { 
      super.onPostExecute(result); 

      Intent intent; 
      if (appNotification.getType().equalsIgnoreCase("GEN")) 
      { 
       intent = new Intent(mContext, NotificationListActivity.class); 
      } 

      else 
      { 
       intent = new Intent(mContext, MainActivity.class); 
      } 

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

      NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); 
      Notification notif = new Notification.Builder(mContext) 
        .setContentIntent(pendingIntent) 
        .setContentTitle(title) 
        .setContentText(appNotification.getSubject()) 
        .setTicker(message) 
        .setSubText(message) 
        .setSmallIcon(R.drawable.police_logo) 
        .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.police_logo)) 

        /*using setStyle am setting big image along with some lines of text in notifications*/ 
        .setStyle(new Notification.BigPictureStyle().bigPicture(result)) 
        .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) 
        .build(); 
      notif.flags |= Notification.FLAG_AUTO_CANCEL; 
      notificationManager.notify(((int) appNotification.getId()) + 1000, notif); 
     } 
    } 
} 
関連する問題