7

Android Wearと統合されたメッセージング アプリがあります。ハングアウトと同様に、Android Wear スマートウォッチで通知を選択するときに、選択したメッセージに対応する会話を表示する 2 番目のカードにスワイプできます。通知を使用して実装しますBigTextStyleが、最大文字数がBigTextStyleサポートされていることを知る必要があるため、会話が大きすぎて完全に収まらない場合に会話を適切にトリミングできます。ドキュメントでこの情報を見つけることができませんでした。

いくつかの調査の後、少なくとも Android Wear エミュレーターでは、最大文字数は約 5000 です。したがって、次のようなことができます。

// scroll to the bottom of the notification card
NotificationCompat.WearableExtender extender = new NotificationCompat.WearableExtender().setStartScrollBottom(true);

// get conversation messages in a big single text
CharSequence text = getConversationText();

// trim text to its last 5000 chars
int start = Math.max(0, text.length() - 5000);
text = text.subSequence(start, text.length());

// set text into the big text style
NotificationCompat.BigTextStyle style = new NotificationCompat.BigTextStyle().bigText(text);

// build notification
Notification notification = new NotificationCompat.Builder(context).setStyle(style).extend(extender).build();

BigTextStyle通知に収まる正確な文字数を知っている人はいますか? 異なるデバイス間で変更されますか?

4

1 に答える 1

10

簡単な回答 制限は 5120 文字 (5KB) ですが、メッセージを制限する必要はありません。これはビルダーで行われます。

詳細な回答

あなたが使用NotificationCompat.BigTextStyleしているコードでは、内部的にNotificationCompat.Builder.

に電話するとこうなるsetBigContentTitle

    /**
     * Overrides ContentTitle in the big form of the template.
     * This defaults to the value passed to setContentTitle().
     */
    public BigTextStyle setBigContentTitle(CharSequence title) {
        mBigContentTitle = Builder.limitCharSequenceLength(title);
        return this;
    }

関数limitCharSequenceLengthはこれを行います

    protected static CharSequence limitCharSequenceLength(CharSequence cs) {
        if (cs == null) return cs;
        if (cs.length() > MAX_CHARSEQUENCE_LENGTH) {
            cs = cs.subSequence(0, MAX_CHARSEQUENCE_LENGTH);
        }
        return cs;
    }

そして、定数宣言を調べると、これが見つかりました

    /**
     * Maximum length of CharSequences accepted by Builder and friends.
     *
     * <p>
     * Avoids spamming the system with overly large strings such as full e-mails.
     */
    private static final int MAX_CHARSEQUENCE_LENGTH = 5 * 1024;
于 2015-07-27T08:18:59.077 に答える