From 3c2797f6982ecf2f7b312ff3b389b79501c033ce Mon Sep 17 00:00:00 2001 From: "jihwan.seo" Date: Thu, 10 Mar 2016 17:29:14 +0900 Subject: [PATCH] To get device name from scanned device for Android BLE. Device name has to be included in advertise packet after Android API 23. Change-Id: I0379e1fc1d7675088739f07a47b0d0171e9f57eb Signed-off-by: jihwan.seo Reviewed-on: https://gerrit.iotivity.org/gerrit/5675 Tested-by: jenkins-iotivity Reviewed-by: Jon A. Cruz (cherry picked from commit 27208a308eedba634cd9ed488aa9c6a0c79f906a) Reviewed-on: https://gerrit.iotivity.org/gerrit/5925 --- .../src/bt_le_adapter/android/caleserver.c | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/resource/csdk/connectivity/src/bt_le_adapter/android/caleserver.c b/resource/csdk/connectivity/src/bt_le_adapter/android/caleserver.c index a28d662..f3053b0 100644 --- a/resource/csdk/connectivity/src/bt_le_adapter/android/caleserver.c +++ b/resource/csdk/connectivity/src/bt_le_adapter/android/caleserver.c @@ -67,6 +67,8 @@ static ca_mutex g_threadSendNotifyMutex = NULL; static ca_cond g_threadSendNotifyCond = NULL; static bool g_isSignalSetFlag = false; +static const char CLASSPATH_BT_ADVERTISE_CB[] = "android/bluetooth/le/AdvertiseCallback"; + void CALEServerJNISetContext() { OIC_LOG(DEBUG, TAG, "CALEServerJNISetContext"); @@ -608,6 +610,28 @@ CAResult_t CALEServerStartAdvertise(JNIEnv *env, jobject advertiseCallback) return CA_STATUS_FAILED; } + // Device name has to be included in advertise packet after Android API 23 + OIC_LOG(DEBUG, TAG, "device name will be added into advertise packet"); + jmethodID jni_mid_setIncludeDeviceName = (*env)->GetMethodID(env, jni_cid_AdvertiseDataBuilder, + "setIncludeDeviceName", + "(Z)Landroid/" + "bluetooth/le/" + "AdvertiseData$Builder;"); + if (!jni_mid_setIncludeDeviceName) + { + OIC_LOG(ERROR, TAG, "jni_mid_setIncludeDeviceName is null"); + return CA_STATUS_FAILED; + } + + jobject jni_obj_setIncludeDeviceName = (*env)->CallObjectMethod(env, jni_AdvertiseDataBuilder, + jni_mid_setIncludeDeviceName, + JNI_TRUE); + if (!jni_obj_setIncludeDeviceName) + { + OIC_LOG(ERROR, TAG, "jni_obj_setIncludeDeviceName is null"); + return CA_STATUS_FAILED; + } + jclass jni_cid_BTAdapter = (*env)->FindClass(env, "android/bluetooth/BluetoothAdapter"); if (!jni_cid_BTAdapter) { @@ -2453,6 +2477,13 @@ Java_org_iotivity_ca_CaLeServerInterface_caLeAdvertiseStartFailureCallback(JNIEn VERIFY_NON_NULL_VOID(obj, TAG, "obj"); OIC_LOG_V(INFO, TAG, "LE Advertise Start Failure Callback(%d)", errorCode); + + jint data_too_large = CALEGetConstantsValue(env, CLASSPATH_BT_ADVERTISE_CB, + "ADVERTISE_FAILED_DATA_TOO_LARGE"); + if (data_too_large == errorCode) + { + OIC_LOG_V(ERROR, TAG, "advertise data too large. please check length of device name"); + } } /** -- 2.7.4