通过JNI获取蓝牙socket中的FD
JNIEXPORT jint JNICALL setFdFromBluetooth(
		JNIEnv *env, jobject obj, jobject socket) {

	 /* get the ParcelFileDescriptor from the BluetoothSocket */

	 jclass BluetoothSocketClass=(*env)->GetObjectClass(env,socket);
	 jfieldID ParcelFileDescriptorFid=(*env)->GetFieldID(env,BluetoothSocketClass,"mPfd","Landroid/os/ParcelFileDescriptor;");

	 jobject ParcelFileDescriptorObj=(*env)->GetObjectField(env,BluetoothSocketClass,ParcelFileDescriptorFid);

	 /* get the FileDescriptor from the ParcelFileDescriptor */
	 jclass ParcelFileDescriptorClass=(*env)->GetObjectClass(env,ParcelFileDescriptorObj);
	 jfieldID FileDescriptorFid=(*env)->GetFieldID(env,ParcelFileDescriptorClass,"mFd","Ljava/io/FileDescriptor;");
	 jobject FileDescriptorObj=(*env)->GetObjectField(env,ParcelFileDescriptorClass,FileDescriptorFid);

	 /* get the fd from the FileDescriptor */
	 jobject FileDescriptorClass=(*env)->GetObjectClass(env,FileDescriptorObj);
	 jfieldID fdFid=(*env)->GetFieldID(env, FileDescriptorClass, "descriptor", "I");
	 jint fd= (*env)->GetIntField(env, FileDescriptorObj, fdFid);
	 set_sock_fd((int) fd);
	 return 0;
}
 
这样操作主要是为了用平台通用性 www.sitcoder.com


	
色迷迷 哭 呕吐 大笑 口水 微笑 啵一个 发怒

Hi,您需要填写昵称和邮箱!

  • 必填项
  • 必填项