Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package `in`.blogspot.kmvignesh.locationexample
- import android.Manifest
- import android.annotation.SuppressLint
- import android.content.Context
- import android.content.Intent
- import android.content.pm.PackageManager
- import android.location.Location
- import android.location.LocationListener
- import android.location.LocationManager
- import android.os.Build
- import android.support.v7.app.AppCompatActivity
- import android.os.Bundle
- import android.provider.Settings
- import android.widget.Toast
- import kotlinx.android.synthetic.main.activity_main.*
- import kotlin.math.asin
- private const val PERMISSION_REQUEST = 10
- class MainActivity : AppCompatActivity() {
- lateinit var locationManager: LocationManager
- private var hasGps = false
- private var hasNetwork = false
- private var locationGps: Location? = null
- private var locationNetwork: Location? = null
- private var permissions = arrayOf(Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.ACCESS_COARSE_LOCATION)
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_main)
- disableView()
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
- if (checkPermission(permissions)) {
- enableView()
- } else {
- requestPermissions(permissions, PERMISSION_REQUEST)
- }
- } else {
- enableView()
- }
- }
- private fun disableView() {
- btn_get_location.isEnabled = false
- }
- private fun enableView() {
- btn_get_location.isEnabled = true
- btn_get_location.setOnClickListener { getLocation()}
- Toast.makeText(this, "Done", Toast.LENGTH_SHORT).show()
- }
- @SuppressLint("MissingPermission")
- private fun getLocation() {
- locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
- hasGps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
- hasNetwork = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
- if (hasGps || hasNetwork) {
- if (hasGps) {
- locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 0F, object : LocationListener {
- override fun onLocationChanged(location: Location?) {
- if (location != null) {
- locationGps = location
- tv_result.setText("\nLatitude : " + locationGps!!.latitude +
- "\nLongitude : " + locationGps!!.longitude)
- tv_distance.setText(getDistanceBetweenTwoMembers(56.109551,
- 47.479125,
- locationGps!!.latitude,
- locationGps!!.longitude).toString())
- }
- }
- override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {
- }
- override fun onProviderEnabled(provider: String?) {
- }
- override fun onProviderDisabled(provider: String?) {
- }
- })
- }
- if (hasNetwork) {
- locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 5000, 0F, object : LocationListener {
- override fun onLocationChanged(location: Location?) {
- if (location != null) {
- locationNetwork = location
- tv_result.setText("\nLatitude : + {" + locationNetwork!!.latitude +
- "\nLongitude : " + locationNetwork!!.longitude)
- tv_distance.setText(getDistanceBetweenTwoMembers(56.109551,
- 47.479125,
- locationNetwork!!.latitude,
- locationNetwork!!.longitude).toString())
- }
- }
- override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {
- }
- override fun onProviderEnabled(provider: String?) {
- }
- override fun onProviderDisabled(provider: String?) {
- }
- })
- }
- } else {
- startActivity(Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS))
- }
- }
- private fun checkPermission(permissionArray: Array<String>): Boolean {
- for (i in permissionArray.indices) {
- if (checkCallingOrSelfPermission(permissionArray[i]) == PackageManager.PERMISSION_DENIED)
- return false
- }
- return true
- }
- private fun getDistanceBetweenTwoMembers(latitude : Double, longitude : Double, latitude1: Double, longitude1: Double)
- : Double{
- val llatitude = latitude * kotlin.math.PI/180
- val llatitude1 = latitude1 * kotlin.math.PI/180
- val llongitude = longitude * kotlin.math.PI/180
- val llongitude1 = longitude1* kotlin.math.PI/180
- val firstTerm = kotlin.math.sin((llatitude-llatitude1)/2) * kotlin.math.sin((llatitude-llatitude1)/2)
- val secondTerm = kotlin.math.cos(llatitude)*
- kotlin.math.cos(llatitude1)*
- kotlin.math.sin((llongitude - llongitude1)/2)*
- kotlin.math.sin((llongitude - llongitude1)/2)
- val sqrt = kotlin.math.sqrt(firstTerm + secondTerm)
- return kotlin.math.round(2 * asin(sqrt) * 6367.444)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement