首页 文章

Android - WhatsApp:贴纸没有显示

提问于
浏览
0

我正在按照本指南制作贴纸应用程序: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);
}

注释行从资产中获取贴纸,但我已更改它,以便从内部存储中抓取贴纸 .

我错过了什么或看错了地方吗?

我还从 StickerContentProvider.java 更改了 readContentFile()fetchFile() *,因此贴纸是从内部存储而不是资产中获取的 .

*如此处所述:https://github.com/WhatsApp/stickers/blob/master/Android/README.md#expose-files-that-are-stored-internally-as-stickers-through-contentprovider

1 回答

  • 0

    我有它的工作!

    所有的功劳都归于Meikiem:他的答案中的comments指向了我正确的方向

    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);
    }
    

相关问题