我可以在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中。不知道有什麼問題!
另一個簡單的例子目的是什麼?你的第一次嘗試在哪裏? – EJP 2012-08-05 07:51:12
我的第一次嘗試是這樣的: – user1416662 2012-08-05 13:11:33
您的第一次嘗試與您試圖在JNI中重新實現的Java代碼沒有任何相似之處,但您仍然沒有給出任何*理由*因爲想要這樣做。我看不到這一點。 – EJP 2012-08-05 21:53:48