微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 react native 中检查 whatsapp 贴纸是否已添加?

如何解决如何在 react native 中检查 whatsapp 贴纸是否已添加?

我遇到了与 WhatsApp 贴纸实施相关的问题。我使用了 this library 我想检查 WhatsApp 中是否已经添加了特定的贴纸。

我怎样才能做到这一点?请指导我。

解决方法

我使用了来自 this library 的以下文件。 isPackageInstalled() 函数对我有用(注意:我只希望此功能仅适用于 Android)

        package org.roborox.whatsapp;
    
    import android.content.ContentResolver;
    import android.content.Context;
    import android.content.Intent;
    import android.content.pm.ApplicationInfo;
    import android.content.pm.PackageManager;
    import android.content.pm.ProviderInfo;
    import android.database.Cursor;
    import android.net.Uri;
    
    import androidx.annotation.NonNull;

public class WhitelistCheck {
    private static final String AUTHORITY_QUERY_PARAM = "authority";
    private static final String IDENTIFIER_QUERY_PARAM = "identifier";
    private static String STICKER_APP_AUTHORITY = "sticker_pack_authority";// StickerContentProvider.authority;
    public static String CONSUMER_WHATSAPP_PACKAGE_NAME = "com.whatsapp";
    public static String INSTAGRAM_PACKAGE_NAME = "com.instagram.android";
    public static String SMB_WHATSAPP_PACKAGE_NAME = "com.whatsapp.w4b";
    private static String CONTENT_PROVIDER = ".provider.sticker_whitelist_check";
    private static String QUERY_PATH = "is_whitelisted";
    private static String QUERY_RESULT_COLUMN_NAME = "result";

public static boolean isWhitelisted(@NonNull Context context,@NonNull String identifier) {
    try {
        boolean consumerResult = isWhitelistedFromProvider(context,identifier,CONSUMER_WHATSAPP_PACKAGE_NAME);
        boolean smbResult = isWhitelistedFromProvider(context,SMB_WHATSAPP_PACKAGE_NAME);
        return consumerResult && smbResult;
    } catch (Exception e) {
        return false;
    }
}

private static boolean isWhitelistedFromProvider(@NonNull Context context,@NonNull String identifier,String whatsappPackageName) {
    final PackageManager packageManager = context.getPackageManager();
    if (isPackageInstalled(whatsappPackageName,packageManager)) {
        final String whatsappProviderAuthority = whatsappPackageName + CONTENT_PROVIDER;
        final ProviderInfo providerInfo = packageManager.resolveContentProvider(whatsappProviderAuthority,PackageManager.GET_META_DATA);
        // provider is not there.
        if (providerInfo == null) {
            return false;
        }
        final Uri queryUri = new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT).authority(whatsappProviderAuthority).appendPath(QUERY_PATH).
                appendQueryParameter(AUTHORITY_QUERY_PARAM,BuildConfig.CONTENT_PROVIDER_AUTHORITY).appendQueryParameter(IDENTIFIER_QUERY_PARAM,identifier).build();
        final Cursor cursor = context.getContentResolver().query(queryUri,null,null);

        if (cursor != null && cursor.moveToFirst()) {
            final int whiteListResult = cursor.getInt(cursor.getColumnIndexOrThrow(QUERY_RESULT_COLUMN_NAME));
            return whiteListResult == 1;
        }

    } else {
        //if app is not installed,then don't need to take into its whitelist info into account.
        return true;
    }
    return false;
}

public static boolean isPackageInstalled(String packageName,PackageManager packageManager) {
    try {
        final ApplicationInfo applicationInfo = packageManager.getApplicationInfo(packageName,0);
        //noinspection SimplifiableIfStatement
        if (applicationInfo != null) {
            return applicationInfo.enabled;
        } else {
            return false;
        }
    } catch (PackageManager.NameNotFoundException e) {
        return false;
    }
}


public static boolean redirectToInstagram(Context context) {
    final PackageManager packageManager = context.getPackageManager();
    if (isPackageInstalled(INSTAGRAM_PACKAGE_NAME,packageManager)) {
        Intent i = context.getPackageManager().getLaunchIntentForPackage(INSTAGRAM_PACKAGE_NAME);
        context.startActivity(i);
        return true;
    } else {
        return false;
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?