4

で c から IMEI を取得したいのですJNIが、以下のコードを使用しましたが、取得に失敗したというエラーが発生しcls、常に が返さNULLれました。env とコンテキストを確認しましたが、問題はありませんでしたContext。クラスを取得できなかったのはなぜですか? 私はインターネットから検索しました。誰かが を使用するjava/lang/Object代わりに を使用する必要があると言ってandroid/context/Contextいます。誰か助けてくれませんか? 3Q.getSystemServicejava/lang/Object

char * get_dev_id(JNIEnv *env, jobject context)
{   
    jclass cls = (*env)->FindClass(env, "android/context/Context");   
    // ---------------- cls == NULL all the time

    jmethodID mid = (*env)->GetMethodID(env, cls, "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;");
    jfieldID fid = (*env)->GetStaticFieldID(env, cls, "TELEPHONY_SERVICE", "Ljava/lang/String;");
    jstring str = (*env)->GetStaticObjectField(env, cls, fid);
    jobject telephony = (*env)->CallObjectMethod(env, context, mid, str);
    cls = (*env)->FindClass(env, "android/telephony/TelephonyManager");
    mid =(*env)->GetMethodID(env, cls, "getDeviceId", "()Ljava/lang/String;");
    str = (*env)->CallObjectMethod(env, telephony, mid);
    jsize len = (*env)->GetStringUTFLength(env, str);
    char* deviceId = calloc(len + 1, 1);
    (*env)->GetStringUTFRegion(env, str, 0, len, deviceId);
    (*env)->DeleteLocalRef(env, str);
    /* to get a string in deviceId */

    return deviceId;
}
4

0 に答える 0