0

我可以在 android 中获取与以下 Java 代码相关联的服务名称。

//packageToCheck - pass the package name
PackageInfo servicePackage = null;
servicePackage = pm.getPackageInfo(packageToCheck, PackageManager.GET_SERVICES);
ServiceInfo[] sinfo = servicePackage.services;

for(ServiceInfo Servinfo : sinfo){
  System.out.println("Service Name:" + Servinfo.name + "for Package:" + packageToCheck);
}

现在,我正在尝试使用 C 代码在 JNI 中实现。关于如何实现这一点的任何见解或示例代码?谢谢!!!

我的第一次尝试是:jclass cls = (*env)->GetObjectClass(env, obj);

__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "1\n");
jmethodID mid = (*env)->GetMethodID(env, cls, "getPackageManager", "()Landroid/content/pm/PackageManager;");
__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "2\n");
jobject packageManager = (*env)->CallObjectMethod(env, obj, mid);
__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "3\n");
// this.getPackageName()
mid = (*env)->GetMethodID(env, cls, "getPackageName", "()Ljava/lang/String;");
__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "4\n");
jstring packageName = (jstring) (*env)->CallObjectMethod(env, obj, mid);
__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "5\n");

输出 "2" 后就挂在 LogCat 中。不知道怎么回事!!!

4

2 回答 2

0

这是一个非常小的示例,您可以查看并运行它。

https://bitbucket.org/sentimental/jni_poc

于 2012-08-05T08:03:59.183 回答
0

你可以在这里查看另一个简单的例子

于 2012-11-04T16:18:29.583 回答