Android/NDK JNI를 통해서 Device ID 구하기 Real_G 2012. 9. 20. 18:59 JAVA package com.sklee.jnitest; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.telephony.TelephonyManager; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.TextView; public class JNITestActivity extends Activity { private TextView mTextView; private Context mContext; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mContext = getApplicationContext(); mTextView = (TextView) findViewById(R.id.textivew); System.loadLibrary("hellojni"); findViewById(R.id.btn).setOnClickListener(new OnClickListener() { public void onClick(View v) { /* * TelephonyManager tManager = (TelephonyManager) * getSystemService(Context.TELEPHONY_SERVICE); String mDeviceID * = tManager.getDeviceId(); Log.e("HOHO", "HOHO : " + * mDeviceID); */ mTextView.setText(getString()); } }); } public native String getString(); } NATIVE #include <string.h> #include <jni.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <android/log.h> #include "HelloJNI.h" #define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, "libnav", __VA_ARGS__) #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG , "libnav", __VA_ARGS__) #define LOGI(...) __android_log_print(ANDROID_LOG_INFO , "libnav", __VA_ARGS__) #define LOGW(...) __android_log_print(ANDROID_LOG_WARN , "libnav", __VA_ARGS__) #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR , "libnav", __VA_ARGS__) JNIEXPORT jstring JNICALL Java_com_sklee_jnitest_JNITestActivity_getString(JNIEnv *env, jobject obj){ jclass cls =(*env)->GetObjectClass(env, obj); jfieldID fid = (*env)->GetFieldID(env, cls, "mContext", "Landroid/content/Context;"); jobject mContext = (*env)->GetObjectField(env, obj, fid); jclass cls_context = (*env)->FindClass(env, "android/content/Context"); jmethodID getSystemService = (*env)->GetMethodID(env, cls_context, "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;"); jfieldID TELEPHONY_SERVICE = (*env)->GetStaticFieldID(env, cls_context, "TELEPHONY_SERVICE", "Ljava/lang/String;"); jstring str = (*env)->GetStaticObjectField(env, cls_context, TELEPHONY_SERVICE); jobject telephonymanager = (*env)->CallObjectMethod(env, mContext, getSystemService, str); jclass cls_tm = (*env)->FindClass(env, "android/telephony/TelephonyManager"); jmethodID getDeviceId = (*env)->GetMethodID(env, cls_tm, "getDeviceId", "()Ljava/lang/String;"); jstring deviceid = (*env)->CallObjectMethod(env, telephonymanager, getDeviceId); jsize len_jstr = (*env)->GetStringUTFLength(env, deviceid); LOGE("HOHO deviceid lenth : %d",len_jstr); return deviceid; } 반응형 저작자표시 비영리 변경금지 (새창열림)