在android';s config.xml,然后在尝试配对设备时,我看到hfpclient';s JNI接口
我可以通过上面的代码验证MethodID是否已分配给变量在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
@@ -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());