Android - WhatsApp: наклейки не отображаются - PullRequest
0 голосов
/ 09 декабря 2018

Я следую этому руководству для создания приложения наклеек: https://github.com/WhatsApp/stickers/tree/master/Android

То, что я делаю по-другому, это получение json, изображений лотка и файлов стикеров из веб-сервисавместо активов.

Все работает нормально (включая добавление стикеров в WhatsApp), за исключением одного: наклейки webp не отображаются в подробном представлении пакета (sticker_pack_details.xml).

Я изменяю, куда загружается файл стикера, вот так

StickerPreviewAdapter.java

public void onBindViewHolder(@NonNull final StickerPreviewViewHolder stickerPreviewViewHolder, final int i)}
{
    stickerPreviewViewHolder.stickerPreviewView.setImageResource(errorResource);
    //stickerPreviewViewHolder.stickerPreviewView.setImageURI(StickerPackLoader.getStickerAssetUri(stickerPack.identifier, stickerPack.getStickers().get(i).imageFileName));

    String filename = "/data/user/0/com.example.samplestickerapp/files/" + stickerPack.identifier + "/" + stickerPack.getStickers().get(i).imageFileName;
    android.net.Uri stickerURI = android.net.Uri.parse(filename);
    stickerPreviewViewHolder.stickerPreviewView.setImageURI(stickerURI);
}

Строка с комментариями выбирает стикеры из ресурсов, но я изменилчтобы стикеры были извлечены из внутреннего хранилища.

Я что-то упустил или смотрю не в том месте?

Я также изменил readContentFile() и fetchFile()* с StickerContentProvider.java , поэтому стикер извлекается из внутреннего хранилища, а не из ресурсов.

*, как указано здесь: https://github.com/WhatsApp/stickers/blob/master/Android/README.md#expose-files-that-are-stored-internally-as-stickers-through-contentprovider

1 Ответ

0 голосов
/ 10 декабря 2018

У меня все работает !!

Вся заслуга идет Meikiem : его комментарии его ответ указал мне в правильном направлении

public void onBindViewHolder(@NonNull final StickerPreviewViewHolder stickerPreviewViewHolder, final int i)}
{
    stickerPreviewViewHolder.stickerPreviewView.setImageResource(errorResource);
    //stickerPreviewViewHolder.stickerPreviewView.setImageURI(StickerPackLoader.getStickerAssetUri(stickerPack.identifier, stickerPack.getStickers().get(i).imageFileName));

    String filename = "/data/user/0/com.example.samplestickerapp/files/" + stickerPack.identifier + "/" + stickerPack.getStickers().get(i).imageFileName;

    //Instead of this:
    //android.net.Uri stickerURI = android.net.Uri.parse(filename);

    //I had to do this:
    java.io.File file = new java.io.File(filename);
    android.net.Uri stickerURI = android.net.Uri.fromFile(file);

    stickerPreviewViewHolder.stickerPreviewView.setImageURI(stickerURI);
}
...