Advertisement
Guest User

Untitled

a guest
Nov 5th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 5.95 KB | None | 0 0
  1. package `in`.blogspot.kmvignesh.locationexample
  2.  
  3. import android.Manifest
  4. import android.annotation.SuppressLint
  5. import android.content.Context
  6. import android.content.Intent
  7. import android.content.pm.PackageManager
  8. import android.location.Location
  9. import android.location.LocationListener
  10. import android.location.LocationManager
  11. import android.os.Build
  12. import android.support.v7.app.AppCompatActivity
  13. import android.os.Bundle
  14. import android.provider.Settings
  15. import android.widget.Toast
  16. import kotlinx.android.synthetic.main.activity_main.*
  17. import kotlin.math.asin
  18.  
  19. private const val PERMISSION_REQUEST = 10
  20.  
  21. class MainActivity : AppCompatActivity() {
  22.  
  23.  
  24.     lateinit var locationManager: LocationManager
  25.     private var hasGps = false
  26.     private var hasNetwork = false
  27.     private var locationGps: Location? = null
  28.     private var locationNetwork: Location? = null
  29.  
  30.     private var permissions = arrayOf(Manifest.permission.ACCESS_FINE_LOCATION,
  31.                                     Manifest.permission.ACCESS_COARSE_LOCATION)
  32.     override fun onCreate(savedInstanceState: Bundle?) {
  33.         super.onCreate(savedInstanceState)
  34.         setContentView(R.layout.activity_main)
  35.         disableView()
  36.         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
  37.             if (checkPermission(permissions)) {
  38.                 enableView()
  39.             } else {
  40.                 requestPermissions(permissions, PERMISSION_REQUEST)
  41.             }
  42.         } else {
  43.             enableView()
  44.         }
  45.  
  46.     }
  47.  
  48.     private fun disableView() {
  49.         btn_get_location.isEnabled = false
  50.     }
  51.  
  52.     private fun enableView() {
  53.         btn_get_location.isEnabled = true
  54.         btn_get_location.setOnClickListener { getLocation()}
  55.         Toast.makeText(this, "Done", Toast.LENGTH_SHORT).show()
  56.     }
  57.  
  58.     @SuppressLint("MissingPermission")
  59.     private fun getLocation() {
  60.         locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
  61.         hasGps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
  62.         hasNetwork = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
  63.         if (hasGps || hasNetwork) {
  64.  
  65.             if (hasGps) {
  66.                 locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 0F, object : LocationListener {
  67.                     override fun onLocationChanged(location: Location?) {
  68.                         if (location != null) {
  69.                             locationGps = location
  70.                             tv_result.setText("\nLatitude : " + locationGps!!.latitude +
  71.                                     "\nLongitude : " + locationGps!!.longitude)
  72.                             tv_distance.setText(getDistanceBetweenTwoMembers(56.109551,
  73.                                                                             47.479125,
  74.                                                                             locationGps!!.latitude,
  75.                                                                             locationGps!!.longitude).toString())
  76.                         }
  77.                     }
  78.                     override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {
  79.                     }
  80.                     override fun onProviderEnabled(provider: String?) {
  81.                     }
  82.                     override fun onProviderDisabled(provider: String?) {
  83.                     }
  84.                 })
  85.  
  86.             }
  87.             if (hasNetwork) {
  88.                 locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 5000, 0F, object : LocationListener {
  89.                     override fun onLocationChanged(location: Location?) {
  90.                         if (location != null) {
  91.                             locationNetwork = location
  92.                             tv_result.setText("\nLatitude : + {" + locationNetwork!!.latitude +
  93.                                     "\nLongitude : " + locationNetwork!!.longitude)
  94.                             tv_distance.setText(getDistanceBetweenTwoMembers(56.109551,
  95.                                                                             47.479125,
  96.                                                                             locationNetwork!!.latitude,
  97.                                                                             locationNetwork!!.longitude).toString())
  98.                         }
  99.                     }
  100.                     override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {
  101.                     }
  102.                     override fun onProviderEnabled(provider: String?) {
  103.                     }
  104.                     override fun onProviderDisabled(provider: String?) {
  105.                     }
  106.                 })
  107.             }
  108.  
  109.  
  110.         } else {
  111.             startActivity(Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS))
  112.         }
  113.     }
  114.  
  115.     private fun checkPermission(permissionArray: Array<String>): Boolean {
  116.  
  117.         for (i in permissionArray.indices) {
  118.             if (checkCallingOrSelfPermission(permissionArray[i]) == PackageManager.PERMISSION_DENIED)
  119.                 return false
  120.         }
  121.         return true
  122.     }
  123.  
  124.     private fun getDistanceBetweenTwoMembers(latitude : Double, longitude : Double, latitude1: Double, longitude1: Double)
  125.             : Double{
  126.         val llatitude = latitude * kotlin.math.PI/180
  127.         val llatitude1 = latitude1 * kotlin.math.PI/180
  128.         val llongitude = longitude * kotlin.math.PI/180
  129.         val llongitude1 = longitude1* kotlin.math.PI/180
  130.         val firstTerm = kotlin.math.sin((llatitude-llatitude1)/2) * kotlin.math.sin((llatitude-llatitude1)/2)
  131.         val secondTerm = kotlin.math.cos(llatitude)*
  132.                 kotlin.math.cos(llatitude1)*
  133.                 kotlin.math.sin((llongitude - llongitude1)/2)*
  134.                 kotlin.math.sin((llongitude - llongitude1)/2)
  135.         val sqrt = kotlin.math.sqrt(firstTerm + secondTerm)
  136.         return kotlin.math.round(2 * asin(sqrt) * 6367.444)
  137.     }
  138.  
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement