Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android';s config.xml,然后在尝试配对设备时,我看到hfpclient';s JNI接口_Android_Bluetooth_Crash_Java Native Interface_Hfp - Fatal编程技术网

在android';s config.xml,然后在尝试配对设备时,我看到hfpclient';s JNI接口

在android';s config.xml,然后在尝试配对设备时,我看到hfpclient';s JNI接口,android,bluetooth,crash,java-native-interface,hfp,Android,Bluetooth,Crash,Java Native Interface,Hfp,我可以通过上面的代码验证MethodID是否已分配给变量 @@ -350,6 +368,14 @@ static bthf_client_callbacks_t sBluetoothHfpClientCallbacks = { static void classInitNative(JNIEnv* env, jclass clazz) { method_onConnectionStateChanged = env->GetMethodID(clazz, "onConn

我可以通过上面的代码验证MethodID是否已分配给变量

@@ -350,6 +368,14 @@ static bthf_client_callbacks_t sBluetoothHfpClientCallbacks = {
 static void classInitNative(JNIEnv* env, jclass clazz) {
   method_onConnectionStateChanged =
       env->GetMethodID(clazz, "onConnectionStateChanged", "(III[B)V");
+  if(method_onConnectionStateChanged == 0)
+  {
+         ALOGE("%s : FAILED TO INIT OBJ",__func__);
+  }
+  else
+  {
+         ALOGE("%s : INIT OBJ",__func__);
+  }
@-68,13+72,27@@state\u cb(const RawAddress*bd\u addr,
bthf\u客户端\u连接\u状态\u t状态,
未签名的int peer_专长,
未签名的整数字符(壮举){
+std::共享锁(回调锁);
CallbackEnv sCallbackEnv(_func_;);
-如果(!sCallbackEnv.valid())返回;
+如果(!sCallbackEnv.valid()| |!mCallbacksObj)
+  {
+浮油(“****错误****”);
+返回;
+  }
ScopedLocalRef addr(sCallbackEnv.get(),marshall_bda(bd_addr));
+
如果(!addr.get())返回;
ALOGD(“%s:状态%d对等功能%d同级功能%d”,“同级功能,状态,对等功能,同级功能”;
+if(方法\u onConnectionStateChanged==0)
+{
+ALOGE(“%s:初始化对象失败”,函数);
+}
+否则
+{
+ALOGE(“%s:INIT OBJ”,函数);
+}
sCallbackEnv->CallVoidMethod(mCallbacksObj,方法\u onConnectionStateChanged,
州,同级,同级,同级,
addr.get());
此外,我在调用CallVoidMethod()的地方也验证了这一点,即使在那里,我也可以看到方法\u onConnectionStateChanged没有失去其作用域

因此,我不确定是什么导致了这个错误:
JNI在应用程序中检测到错误:无法调用void com.android.bluetooth.hfpclient.NativeInterface.onConnectionStateChanged(int,int,int,byte[])在java.lang.Class的实例上,我遇到了同样的问题,并发现它在android中得到了修复:请参阅


另外请注意,如果未启用(例如:内置用户模式),则不会出现此问题。

感谢您的回复。我们将尝试一下并通知您。
@@ -350,6 +368,14 @@ static bthf_client_callbacks_t sBluetoothHfpClientCallbacks = {
 static void classInitNative(JNIEnv* env, jclass clazz) {
   method_onConnectionStateChanged =
       env->GetMethodID(clazz, "onConnectionStateChanged", "(III[B)V");
+  if(method_onConnectionStateChanged == 0)
+  {
+         ALOGE("%s : FAILED TO INIT OBJ",__func__);
+  }
+  else
+  {
+         ALOGE("%s : INIT OBJ",__func__);
+  }
@@ -68,13 +72,27 @@ static void connection_state_cb(const RawAddress* bd_addr,
                                 bthf_client_connection_state_t state,
                                 unsigned int peer_feat,
                                 unsigned int chld_feat) {
+  std::shared_lock<std::shared_timed_mutex> lock(callbacks_mutex);
   CallbackEnv sCallbackEnv(__func__);
-  if (!sCallbackEnv.valid()) return;
+  if (!sCallbackEnv.valid() || !mCallbacksObj)
+  {
+         ALOGE("****ERRORR****");
+         return;
+  }

   ScopedLocalRef<jbyteArray> addr(sCallbackEnv.get(), marshall_bda(bd_addr));
+
   if (!addr.get()) return;

   ALOGD("%s: state %d peer_feat %d chld_feat %d", __func__, state, peer_feat, chld_feat);
+  if(method_onConnectionStateChanged == 0)
+{
+        ALOGE("%s : FAILED TO INIT OBJ",__func__);
+}
+else
+{
+        ALOGE("%s : INIT OBJ",__func__);
+}
   sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onConnectionStateChanged,
                                (jint)state, (jint)peer_feat, (jint)chld_feat,
                                addr.get());