Получение только новой почты с сервера IMAP

Вариант 1: Shape Drawable

Это самый простой вариант, если вы хотите создать рамку вокруг макета или вида, в котором вы можете установить фон. Создайте файл XML в папке drawable, который выглядит примерно так:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <solid android:color="#8fff93" />

    <stroke
        android:width="1px"
        android:color="#000" />

</shape>

Вы можете удалить solid, если не хотите заливки. Набор background="@drawable/your_shape_drawable" на вашем макете / представлении.

Вариант 2: Фоновый вид

Вот небольшой трюк, который я использовал в RelativeLayout. По сути, у вас есть черный квадрат под видом, который вы хотите задать рамку, а затем дать этому виду некоторый отступ (не отступ!), Чтобы черный квадрат просвечивал по краям.

Очевидно, что это работает правильно, только если у вида нет прозрачных областей. Если это произойдет, я бы порекомендовал вам написать пользовательский BorderView, который рисует только границу - это должно быть всего несколько десятков строк кода.

<View
    android:id="@+id/border"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/image"
    android:layout_alignLeft="@+id/image"
    android:layout_alignRight="@+id/image"
    android:layout_alignTop="@+id/main_image"
    android:background="#000" />

<ImageView
    android:id="@+id/image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_...
    android:padding="1px"
    android:src="@drawable/..." />

Если вам интересно, он работает с adjustViewBounds=true. Однако, это не работает, если вы хотите иметь фон в целом RelativeLayout, потому что есть ошибка, которая мешает вам заполнить RelativeLayout View. В этом случае я бы рекомендовал Shape drawable.

Вариант 3: 9-патч

И, наконец, последний вариант - использовать 9-патч, как этот:

Вы можете используйте его на любом экране, где вы можете установить android:background="@drawable/...". И да, это должно быть 6х6 - я пробовал 5х5, и это не сработало.

Недостаток этого метода в том, что вы не можете изменить цвета очень легко, но если вам нужны причудливые границы (например, только границы сверху и снизу, как в этом вопросе), то вы не сможете их сделать. с нарисованным Shape, который не очень мощный.

Вариант 4: дополнительные представления

Я забыл упомянуть этот действительно простой вариант, если вы хотите, чтобы границы только выше и ниже вашего вида. Вы можете поместить ваше представление вертикально LinearLayout (если это еще не так), а затем добавить пустые View над и под ним, например:

<View android:background="#000" android:layout_width="match_parent" android:layout_height="1px"/>
18
задан Abhishiv Saxena 5 July 2009 в 20:37
поделиться

3 ответа

Вы хотите использовать уникальный идентификатор (UID) для сообщений. Именно поэтому он был создан.

Вам нужно будет отслеживать последний запрошенный UID, а затем для запроса всех новых сообщений использовать набор сообщений «[UID]: *», где [UID] - это фактическое значение UID.

Например, допустим, последнее отправленное сообщение имело уникальный идентификатор «123456». Вы должны получить

123456: *

Затем отбросить первое возвращенное сообщение.

UID «предполагается», чтобы быть стабильными во всех сеансах, никогда не изменяться и всегда увеличиваться в значении. Уловка, чтобы убедиться в этом, заключается в проверке UIDValidity при выборе папки. Если число UIDValidity не изменилось, то UID должны оставаться действительными для всех сеансов.

Вот соответствующие части из RFC:

2.3.1.1. значение достоверности уникального идентификатора (см. ниже) образует 64-битное значение это НЕ ДОЛЖНО относиться к любому другому сообщению в почтовом ящике или последующий почтовый ящик с таким же именем навсегда. Уникальные идентификаторы присваиваются в почтовом ящике строго по возрастанию; как каждый сообщение добавляется в почтовый ящик, ему назначается более высокий UID, чем сообщение (я), которые были добавлены ранее. В отличие от последовательности сообщений номера, уникальные идентификаторы не обязательно должны быть смежными.

Уникальный идентификатор сообщения НЕ ДОЛЖЕН изменяться во время сеанс, и НЕ ДОЛЖЕН изменяться между сеансами. Любое изменение уникальные идентификаторы между сеансами ДОЛЖНЫ быть обнаружены с помощью Механизм UIDVALIDITY обсуждается ниже. Постоянные уникальные идентификаторы необходимы для того, чтобы клиент повторно синхронизировал свое состояние с предыдущим сеанс с сервером (например, отключенный или автономный доступ клиенты); это обсуждается далее в [IMAP-DISC].

Примечание. Следующее значение уникального идентификатора предназначено для предоставить возможность клиенту определить, есть ли сообщения были доставлены в почтовый ящик с момента в прошлый раз он проверил это значение.

Вот ссылка с дополнительной информацией:

http://www.faqs.org/rfcs/rfc3501.html

Что бы я делал, так это также отслеживать InternalDate загруженных сообщений. Таким образом, если вы когда-нибудь потеряете синхронизацию UID, вы сможете по крайней мере перебрать сообщения и найти последнее загруженное на основе InternalDate сообщения.

40
ответ дан 30 November 2019 в 06:51
поделиться

Если вы можете фильтровать входящую почту в определенную папку IMAP на стороне сервера, ваше приложение может читать новые сообщения в этой папке, а затем перемещать их в стандартную папку INBOX после этого.

0
ответ дан 30 November 2019 в 06:51
поделиться

Есть флаг imap, который называется "замечено". Большинство клиентов помечают сообщение как видимое при просмотре сообщения, поэтому вам следует перебирать сообщения на сервере, для которых этот флаг не установлен.

Вот фрагмент кода, который должен дать вам правильное представление. Оперативный бит, конечно же,

imap.search(["NOT", "SEEN"]).each do bla.bla.bla
4
ответ дан 30 November 2019 в 06:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: