@@ -11,6 +11,8 @@ import android.os.Looper
1111import android.provider.Settings
1212import androidx.core.app.ActivityCompat
1313import com.google.android.gms.location.*
14+ import com.linecorp.abc.location.ABCLocation.Companion.notifyOnLocationUnavailable
15+ import com.linecorp.abc.location.utils.LocationUtil
1416
1517internal 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()
0 commit comments