diff --git a/android/build.gradle b/android/build.gradle index 039776f..178164d 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -37,15 +37,22 @@ android { lintOptions { disable 'InvalidPackage' } + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = '17' + } } dependencies { - api 'com.google.android.gms:play-services-nearby:17.0.0' + api 'com.google.android.gms:play-services-nearby:19.3.0' implementation 'com.google.code.gson:gson:2.10.1' - implementation 'com.google.android.gms:play-services-location:17.1.0' - implementation 'androidx.core:core-ktx:1.9.0' + implementation 'com.google.android.gms:play-services-location:21.3.0' + implementation 'androidx.core:core-ktx:1.13.1' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" } repositories { mavenCentral() -} +} \ No newline at end of file diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index b47af3a..eac3648 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -18,11 +18,19 @@ - + + + + + + + + diff --git a/android/src/main/kotlin/com/nankai/flutter_nearby_connections/FlutterNearbyConnectionsPlugin.kt b/android/src/main/kotlin/com/nankai/flutter_nearby_connections/FlutterNearbyConnectionsPlugin.kt index 54f268c..7b129fe 100644 --- a/android/src/main/kotlin/com/nankai/flutter_nearby_connections/FlutterNearbyConnectionsPlugin.kt +++ b/android/src/main/kotlin/com/nankai/flutter_nearby_connections/FlutterNearbyConnectionsPlugin.kt @@ -95,10 +95,12 @@ class FlutterNearbyConnectionsPlugin : FlutterPlugin, MethodCallHandler, Activit startAdvertisingPeer -> { Log.d("nearby_connections", "startAdvertisingPeer") serviceBindManager.mService?.startAdvertising(strategy, localDeviceName) + result.success(true) } startBrowsingForPeers -> { Log.d("nearby_connections", "startBrowsingForPeers") serviceBindManager.mService?.startDiscovery(strategy) + result.success(true) } stopAdvertisingPeer -> { Log.d("nearby_connections", "stopAdvertisingPeer") @@ -117,6 +119,7 @@ class FlutterNearbyConnectionsPlugin : FlutterPlugin, MethodCallHandler, Activit val deviceId = call.argument("deviceId") val displayName = call.argument("deviceName") serviceBindManager.mService?.connect(deviceId!!, displayName!!) + result.success(true) } disconnectPeer -> { Log.d("nearby_connections", "disconnectPeer") @@ -130,15 +133,20 @@ class FlutterNearbyConnectionsPlugin : FlutterPlugin, MethodCallHandler, Activit val deviceId = call.argument("deviceId") val message = call.argument("message") serviceBindManager.mService?.sendStringPayload(deviceId!!, message!!) + result.success(true) } } } override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) { channel.setMethodCallHandler(null) - serviceBindManager.mService?.stopAdvertising() - serviceBindManager.mService?.stopDiscovery() - serviceBindManager.unbindService() + serviceBindManager?.let { manager -> + manager.mService?.let { service -> + service.stopAdvertising() + service.stopDiscovery() + } + manager.unbindService() + } locationHelper = null exitProcess(0) } diff --git a/android/src/main/kotlin/com/nankai/flutter_nearby_connections/LocationHelper.kt b/android/src/main/kotlin/com/nankai/flutter_nearby_connections/LocationHelper.kt index 0b31df8..2717ec4 100644 --- a/android/src/main/kotlin/com/nankai/flutter_nearby_connections/LocationHelper.kt +++ b/android/src/main/kotlin/com/nankai/flutter_nearby_connections/LocationHelper.kt @@ -35,7 +35,11 @@ class LocationHelper(private val activity: Activity) : PluginRegistry.ActivityRe Manifest.permission.ACCESS_WIFI_STATE, Manifest.permission.CHANGE_WIFI_STATE, Manifest.permission.ACCESS_COARSE_LOCATION, - Manifest.permission.ACCESS_FINE_LOCATION), REQUEST_LOCATION_PERMISSION) + Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.BLUETOOTH_SCAN, + Manifest.permission.BLUETOOTH_ADVERTISE, + Manifest.permission.BLUETOOTH_CONNECT, + Manifest.permission.NEARBY_WIFI_DEVICES), REQUEST_LOCATION_PERMISSION) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?): Boolean = @@ -82,29 +86,41 @@ class LocationHelper(private val activity: Activity) : PluginRegistry.ActivityRe } private fun requestLocationEnable() { - val task = LocationServices.getSettingsClient(activity) - .checkLocationSettings(mLocationSettingsRequest) - task.addOnCompleteListener { t -> - try { - t.getResult(ApiException::class.java) - result?.success(true) - } catch (ex: ApiException) { - when (ex.statusCode) { - LocationSettingsStatusCodes.SUCCESS -> { - result?.success(true) - } - LocationSettingsStatusCodes.RESOLUTION_REQUIRED -> try { - val resolvableApiException = ex as ResolvableApiException - resolvableApiException - .startResolutionForResult(activity, LOCATION_ENABLE_REQUEST) - } catch (e: IntentSender.SendIntentException) { - result?.error("LOCATION_SERVICE_ERROR", e.message, null) - } - else -> { - result?.success(false) + mLocationSettingsRequest?.let { request -> + val task = LocationServices.getSettingsClient(activity).checkLocationSettings(request) + task.addOnCompleteListener { t -> + try { + t.getResult(ApiException::class.java) + result?.success(true) + } catch (ex: ApiException) { + when (ex.statusCode) { + LocationSettingsStatusCodes.SUCCESS -> { + result?.success(true) + } + + LocationSettingsStatusCodes.RESOLUTION_REQUIRED -> try { + val resolvableApiException = ex as ResolvableApiException + resolvableApiException.startResolutionForResult( + activity, + LOCATION_ENABLE_REQUEST + ) + } catch (e: IntentSender.SendIntentException) { + result?.error("LOCATION_SERVICE_ERROR", e.message, null) + } + + else -> { + result?.success(false) + } } } } + } ?: run { + // Handle the case where mLocationSettingsRequest is null + result?.error( + "LOCATION_SERVICE_ERROR", + "LocationSettingsRequest is not initialized", + null + ) } } } \ No newline at end of file