gpt4 book ai didi

java - 在 NDK 中获取 Android ID 时出错

转载 作者:行者123 更新时间:2023-11-30 00:47:39 27 4
gpt4 key购买 nike

我在NDK中写了一个获取android ID的方法

void getAndroidID(JNIEnv *env, jobject context, char *deviceId){

int android_id_len = 16;

//Get the Setting.Secure class and the Context Class
jclass c_settings_secure = (*env)->FindClass(env, "android/provider/Settings$Secure");
jclass c_context = (*env)->FindClass(env,"android/content/Context");
if(c_settings_secure == NULL || c_context == NULL){
return;
}
//Get the getContentResolver method
jmethodID m_get_content_resolver = (*env)->GetMethodID(env, c_context, "getContentResolver",
"()Landroid/content/ContentResolver;");
if(m_get_content_resolver == NULL){
return;
}

//Get the Settings.Secure.ANDROID_ID constant
jfieldID f_android_id = (*env)->GetStaticFieldID(env, c_settings_secure, "ANDROID_ID", "Ljava/lang/String;");
if(f_android_id == NULL){
return;
}
jstring s_android_id = (*env)->GetStaticObjectField(env, c_settings_secure, f_android_id);

//create a ContentResolver instance context.getContentResolver()
jobject o_content_resolver = (*env)->CallObjectMethod(env, context, m_get_content_resolver);
if(o_content_resolver == NULL || s_android_id == NULL){
return;
}

//get the method getString
jmethodID m_get_string = (*env)->GetStaticMethodID(env, c_settings_secure, "getString",
"(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String;");
if(m_get_string == NULL){
return;
}

//get the Android ID
jstring android_id = (*env)->CallStaticObjectMethod(env, c_settings_secure,
m_get_string,
o_content_resolver,
s_android_id);
(*env)->GetStringUTFRegion(env, android_id, 0, android_id_len, deviceId);
deviceId[android_id_len] = '\0';
LOGI("deviceId %s", deviceId);
}

我在几部手机上测试了这段代码,它在所有手机上都有效,但在一部手机上我得到了一个异常(exception)StringIndexOutOfBoundsException java.lang.StringIndexOutOfBoundsException: length=15;区域开始=0; regionLength=16当我调用 GetStringUTFRegion 方法时。

为什么我会收到异常,我该如何解决?

最佳答案

您似乎要求翻译的字符多于字符串中的字符 - android_id_len 的硬编码值为 16,而本例中的字符串为 15,作为错误消息说。确保计算字符串的正确长度并将该长度传递给 GetStringUTFRegion,这样您的代码将是跨设备通用的。

关于java - 在 NDK 中获取 Android ID 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41529286/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com