2017-04-19 1 views
0

En utilisant Berlin/Tokyo et Kinvey, lors de la réception d'une notification push GCM contenant un texte de message long, une seule ligne est affichée et le texte restant est découpé.Comment afficher les notifications push GCM multi-lignes dans Delphi?

Creuser l'Internet, il semble que pour que ces notifications soient affichées en pleine longueur, il est nécessaire de définir BigContentView, mais Delphi ne l'expose pas.

Est-ce que quelqu'un sait comment gérer cela, donc les notifications seront affichées en pleine longueur?

Répondre

0

Vous avez un choix 2:

Hack l'unité System.Android.Notification.pas/System.Notification.pas pour ajouter la fonction dont vous avez besoin. Il est facile, il suffit d'une fonction doivent être mis à jour, celle-ci:

function TNotificationCenterAndroid.CreateNativeNotification(const ANotification: TNotification): JNotification; 

    function GetDefaultNotificationSound: Jnet_Uri; 
    begin 
    Result := TJRingtoneManager.JavaClass.getDefaultUri(TJRingtoneManager.JavaClass.TYPE_NOTIFICATION); 
    end; 

    function GetDefaultIconID: Integer; 
    begin 
    Result := TAndroidHelper.Context.getApplicationInfo.icon; 
    end; 

    function GetDefaultIcon: JBitmap; 
    begin 
    Result := TJBitmapFactory.JavaClass.decodeResource(TAndroidHelper.Context.getResources(), GetDefaultIconID); 
    end; 

    function GetContentTitle: JCharSequence; 
    begin 
    if ANotification.Title.IsEmpty then 
     Result := StrToJCharSequence(TAndroidHelper.ApplicationTitle) 
    else 
     Result := StrToJCharSequence(ANotification.Title); 
    end; 

    function GetContentText: JCharSequence; 
    begin 
    Result := StrToJCharSequence(ANotification.AlertBody); 
    end; 

    function GetContentIntent: JPendingIntent; 
    var 
    Intent: JIntent; 
    begin 
    Intent := TAndroidHelper.Context.getPackageManager().getLaunchIntentForPackage(TAndroidHelper.Context.getPackageName()); 
    Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_SINGLE_TOP or TJIntent.JavaClass.FLAG_ACTIVITY_CLEAR_TOP); 
    SaveNotificationIntoIntent(Intent, ANotification); 
    Result := TJPendingIntent.JavaClass.getActivity(TAndroidHelper.Context, TGeneratorUniqueID.GenerateID, Intent, TJPendingIntent.JavaClass.FLAG_UPDATE_CURRENT); 
    end; 

var 
    NotificationBuilder: JNotificationCompat_Builder; 
begin 
    NotificationBuilder := TJNotificationCompat_Builder.JavaClass.init(TAndroidHelper.Context); 
    NotificationBuilder := NotificationBuilder.setDefaults(TJNotification.JavaClass.DEFAULT_LIGHTS); 
    if ANotification.SmallIconId <> 0 then NotificationBuilder := NotificationBuilder.setSmallIcon(ANotification.SmallIconId) 
    else NotificationBuilder := NotificationBuilder.setSmallIcon(GetDefaultIconID); 
    if ANotification.largeIconObj <> nil then NotificationBuilder := NotificationBuilder.setLargeIcon(ANotification.largeIconObj); 
    NotificationBuilder := NotificationBuilder.setContentTitle(GetContentTitle); 
    NotificationBuilder := NotificationBuilder.setContentText(GetContentText); 
    NotificationBuilder := NotificationBuilder.setTicker(GetContentText); 
    NotificationBuilder := NotificationBuilder.setContentIntent(GetContentIntent); 
    NotificationBuilder := NotificationBuilder.setNumber(ANotification.Number); 
    NotificationBuilder := NotificationBuilder.setAutoCancel(True); 
    NotificationBuilder := NotificationBuilder.setWhen(TJDate.Create.getTime); 
    if (ANotification.Color <> TalphaColorRec.null) and 
    (TJBuild_VERSION.JavaClass.SDK_INT >= 21) then NotificationBuilder := NotificationBuilder.setColor(ANotification.Color); 
    if ANotification.VibratePattern <> nil then NotificationBuilder := NotificationBuilder.setVibrate(ANotification.VibratePattern); 

    if ANotification.EnableSound then 
    if ANotification.SoundName.IsEmpty then 
     NotificationBuilder := NotificationBuilder.setSound(GetDefaultNotificationSound) 
    else 
     NotificationBuilder := NotificationBuilder.setSound(StrToJURI(ANotification.SoundName)); 

    // Action buttons won't appear on platforms prior to Android 4.1!!! 
    // http://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#addAction 
    Result := NotificationBuilder.Build; 
end; 

Ou deuxième variante, éviter l'utilisation de delphi TnotificationCenter et construire votre propre à partir de zéro

+0

Merci pour le conseil! Le hack ne semble pas si simple, puisqu'il n'y a pas de BigTextStyle défini. Ceci est ma première application mobile, donc je vais devoir comprendre comment je l'implémenterais. – WarmBooter