android - 如何使用 JNI 从 Android 本机 C++ 调用 PackageManager.hasSystemFeature?
问题描述
如何在 Android 中从 C++ 访问 PackageManager 和相关方法(如 hasSystemFeature)?
解决方案
我最近需要这样做,并拼凑了许多其他答案以使其正常工作。在这里分享它以防它帮助别人。
要使用,请传入您要检查的应用程序上下文和功能字符串。这应该很容易扩展到其他 PackageManager 方法。
extern "C" JNIEXPORT jboolean JNICALL Java_com_your_cool_application_MainActivity_native_1hasSystemFeature(
JNIEnv *env, jobject calling_object, jobject main_activity, jstring feature_string) {
jclass activity_class = env->GetObjectClass(main_activity);
//context.getPackageManager()
jmethodID method_id_pm = env->GetMethodID(activity_class, "getPackageManager", "()Landroid/content/pm/PackageManager;");
jobject package_manager = env->CallObjectMethod(main_activity, method_id_pm);
jclass pm_class = env->GetObjectClass(package_manager);
//PackageManager.hasSystemFeature()
jmethodID method_id_feature = env->GetMethodID(pm_class,"hasSystemFeature", "(Ljava/lang/String;)Z");
jboolean has_feature = env->CallBooleanMethod(package_manager, method_id_feature, feature_string);
return has_feature;
}
推荐阅读
- javascript - 错误:使用 Parcel 运行 Cypress 时找不到绑定文件
- java - 如何确定 2 个 .jar 文件是否是“相同”的版本?
- html - 负责任的工具提示/引导程序 4
- javascript - 为什么这些 javascript 对象是相等的?
- javascript - 如何处理动态链接网址?
- node.js - 面临在实时服务器上上传构建的问题
- amazon-web-services - 来自 Spark 的 S3 写入间歇性失败,错误代码为 404 NoSuchKey
- sql - 我如何在我的 PostgreSQL 数据库中调用另一个过程
- dependency-injection - @BindsInstance 上的 @Singleton
- amazon-web-services - 未知动态 url 路径上的 AWS 应用程序负载均衡器