2017-04-19 6 views
0

Berlin/Tokyo와 Kinvey를 사용하여 긴 메시지 텍스트가 포함 된 GCM 푸시 알림을 받으면 한 줄만 표시되고 나머지 텍스트는 잘립니다.델파이에서 멀티 라인 GCM 푸시 알림을 표시하는 방법은 무엇입니까?

인터넷을 파고 들자면, 전체 길이로 표시되는 통지의 경우 BigContentView를 설정할 필요가 있지만 델파이는 노출시키지 않는 것으로 보입니다.

아무도이 문제를 처리하는 방법을 알고 있으므로 알림이 전체 길이로 표시됩니까?

답변

0

당신은 하나 둘 개 선택이 있습니다

해킹 장치가 System.Android.Notification.pas/System.Notification.pas는 당신이 필요로하는 기능을 추가 할 수 있습니다. 그것은 쉽게, 하나의 기능을 업데이트해야하는이 하나

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; 

또는 두 번째 변형, 델파이 TnotificationCenter의 사용을 피하고 처음부터 자신 만의 팁을위한

+0

감사를 구축! BigTextStyle이 정의되지 않았기 때문에 해킹은 그렇게 단순하지 않은 것 같습니다. 이것은 내 첫 모바일 앱이므로 구현 방법을 알아야합니다. – WarmBooter