2012-08-05 61 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