2012-08-05 74 views
0

我可以在android中使用Java下面的代码获取服务名称。在JNI中实现下面的代码?

//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中。不知道有什么问题!

+0

另一个简单的例子目的是什么?你的第一次尝试在哪里? – EJP 2012-08-05 07:51:12

+0

我的第一次尝试是这样的: – user1416662 2012-08-05 13:11:33

+0

您的第一次尝试与您试图在JNI中重新实现的Java代码没有任何相似之处,但您仍然没有给出任何*理由*因为想要这样做。我看不到这一点。 – EJP 2012-08-05 21:53:48

回答

0

这是一个非常简单的例子,你可以检查出来并运行它。

https://bitbucket.org/sentimental/jni_poc

+0

布赖恩,这是一个非常简单的JNI例子。不过,我很乐意为我的第一次尝试获得任何实现。谢谢!!! – user1416662 2012-08-05 13:15:15

+1

@ user1416662忘记它。这不是免费的编码服务。你将得到的是对你*代码的批评。 – EJP 2012-08-05 21:52:20

+0

;)哈哈,PLZ做我的工作,我向客户开账单。 – 2012-08-06 11:13:14

0

您可以检查here