如何解决如何在 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 举报,一经查实,本站将立刻删除。