Skip to content

Commit 830a4a1

Browse files
authored
Add LocationEnable check on Android
* Update requestPermission for Android12 * Add LocationEnable check on Android
1 parent 1cb2e6d commit 830a4a1

2 files changed

Lines changed: 31 additions & 14 deletions

File tree

src/androidMain/kotlin/com/linecorp/abc/location/LocationManager.kt

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import android.os.Looper
1111
import android.provider.Settings
1212
import androidx.core.app.ActivityCompat
1313
import com.google.android.gms.location.*
14+
import com.linecorp.abc.location.ABCLocation.Companion.notifyOnLocationUnavailable
15+
import com.linecorp.abc.location.utils.LocationUtil
1416

1517
internal actual class LocationManager {
1618

@@ -31,25 +33,32 @@ internal actual class LocationManager {
3133
focusedActivity?.let {
3234
ActivityCompat.requestPermissions(
3335
it,
34-
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
36+
arrayOf(
37+
Manifest.permission.ACCESS_FINE_LOCATION,
38+
Manifest.permission.ACCESS_COARSE_LOCATION
39+
),
3540
requestPermissionsRequestCode
3641
)
3742
}
3843
}
3944

4045
@SuppressLint("MissingPermission")
4146
actual fun startLocationUpdating() {
42-
if (focusedActivity == null) { return }
47+
val activity = focusedActivity ?: return
4348

4449
if (!isPermissionAllowed()) {
4550
requestPermission()
51+
notifyOnLocationUnavailable()
52+
} else if(!LocationUtil.checkLocationEnable(activity)) {
53+
notifyOnLocationUnavailable()
54+
} else {
55+
fusedLocationClient.requestLocationUpdates(
56+
locationRequest,
57+
locationCallback,
58+
Looper.getMainLooper()
59+
)
4660
}
4761

48-
fusedLocationClient.requestLocationUpdates(
49-
locationRequest,
50-
locationCallback,
51-
Looper.getMainLooper()
52-
)
5362
}
5463

5564
actual fun stopLocationUpdating() {
@@ -78,14 +87,9 @@ internal actual class LocationManager {
7887
coordinates)
7988
ABCLocation.notifyOnLocationUpdated(data)
8089
}
81-
82-
override fun onLocationAvailability(locationAvailability: LocationAvailability) {
83-
super.onLocationAvailability(locationAvailability)
84-
if (!locationAvailability.isLocationAvailable) {
85-
ABCLocation.notifyOnLocationUnavailable()
86-
}
87-
}
90+
// 일부 Device 에서 onLocationAvailability 의 값을 믿을 수 없어 사용하지 않음
8891
}
92+
8993
val settings = LocationSettingsRequest.Builder()
9094
.addLocationRequest(locationRequest)
9195
.build()
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.linecorp.abc.location.utils
2+
3+
import android.content.Context
4+
import android.location.LocationManager
5+
6+
object LocationUtil {
7+
fun checkLocationEnable(context: Context): Boolean {
8+
val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
9+
10+
return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
11+
|| locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
12+
}
13+
}

0 commit comments

Comments
 (0)