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