【问题标题】:How to call PackageManager.hasSystemFeature from Android native C++ using JNI?如何使用 JNI 从 Android 本机 C++ 调用 PackageManager.hasSystemFeature?
【发布时间】:2018-06-29 16:39:12
【问题描述】:

如何在 Android 中从 C++ 访问 PackageManager 和相关方法(如 hasSystemFeature)?

【问题讨论】:

    标签: android c++ c android-ndk java-native-interface


    【解决方案1】:

    我最近需要这样做,并拼凑了许多其他答案以使其正常工作。在这里分享,以防对他人有所帮助。

    要使用,请传入您要检查的应用程序上下文和功能字符串。这应该很容易扩展到其他 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;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-09
      • 1970-01-01
      相关资源
      最近更新 更多