转自:http://groups.google.com/group/android-ndk/browse_thread/thread/d00884fe886e5233?fwc=1
Everything what can be done in Android Java can be done also in Native
code using JNI. The code just looks difficult and is harder to write,but at least things are possible.
To get device IMEI, here's code:
JNIEnv &env = ...
jobject activity = ... (android.app.Activity object)
//TelephonyManager telephony_manager =
getSystemService(Context.TELEPHONY_SERVICE);
jmethodID mid = env.GetMethodID(env.GetObjectClass(activity),
"getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;");
jobject telephony_manager = env.CallObjectMethod(activity, mid,
env.NewStringUTF("phone"));
//String s_imei = tm.getDeviceId();
mid = env.GetMethodID(env.GetObjectClass(telephony_manager),
"getDeviceId", "()Ljava/lang/String;");
jstring s_imei = (jstring)env.CallObjectMethod(telephony_manager,
mid);
if(env.ExceptionCheck()){
env.ExceptionClear();
return false;
}
const jchar *imei = env.GetStringCritical(s_imei, NULL);
// copy imei string anywhere you need
env.ReleaseStringCritical(s_imei, imei);
This assumes that your app is standard Android android.app.Activity,
and native code is called from this.