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 でハングアップします。何が悪いのかわからない!!!