diff options
| author | Ognjen Cirkovic <ciraboxkg@gmail.com> | 2022-11-13 21:36:02 +0100 | 
|---|---|---|
| committer | Ognjen Cirkovic <ciraboxkg@gmail.com> | 2022-11-13 21:36:02 +0100 | 
| commit | 7c4295f6edd0074733c628300bdb4e6c8b4fd8ef (patch) | |
| tree | 84c44e401dca0b80ec46f1f02ca74fe9b9cf4c7c | |
| parent | c2617ba1bb0481c045a161c7e1acc841ec169bf5 (diff) | |
Dodata myLocatio na mapi. Dodato dogme da korisnik moze da ode do svoje lokacije.
3 files changed, 139 insertions, 5 deletions
| diff --git a/Client/BrzoDoLokacije/app/build.gradle b/Client/BrzoDoLokacije/app/build.gradle index d0eabb6..8739bf1 100644 --- a/Client/BrzoDoLokacije/app/build.gradle +++ b/Client/BrzoDoLokacije/app/build.gradle @@ -49,6 +49,7 @@ dependencies {      implementation 'androidx.constraintlayout:constraintlayout:2.1.4'      implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'      implementation 'com.google.android.gms:play-services-maps:18.1.0' +    implementation 'com.google.android.gms:play-services-location:21.0.1'      testImplementation 'junit:junit:4.13.2'      androidTestImplementation 'androidx.test.ext:junit:1.1.3'      androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentBrowse.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentBrowse.kt index 08d0fdd..8012583 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentBrowse.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentBrowse.kt @@ -3,17 +3,18 @@ package com.example.brzodolokacije.Fragments  import android.Manifest  import android.content.Context  import android.content.pm.PackageManager +import android.location.Location +import android.location.LocationManager  import android.os.Build  import android.os.Bundle +import android.os.Looper  import android.os.StrictMode  import android.os.StrictMode.ThreadPolicy  import android.preference.PreferenceManager  import android.util.DisplayMetrics -import android.util.Log  import android.view.LayoutInflater  import android.view.View  import android.view.ViewGroup -import android.widget.Button  import android.widget.EditText  import android.widget.Toast  import androidx.core.app.ActivityCompat @@ -21,6 +22,7 @@ import androidx.core.content.ContextCompat  import androidx.fragment.app.Fragment  import com.example.brzodolokacije.R  import com.example.brzodolokacije.Services.GeocoderHelper +import com.google.android.gms.location.*  import com.google.android.material.floatingactionbutton.FloatingActionButton  import org.osmdroid.config.Configuration  import org.osmdroid.tileprovider.tilesource.TileSourceFactory @@ -41,8 +43,11 @@ class FragmentBrowse : Fragment(R.layout.fragment_browse) {      var mRotationGestureOverlay:RotationGestureOverlay?=null      var mScaleBarOverlay: ScaleBarOverlay?=null      var mCompassOverlay:CompassOverlay?=null +    private lateinit var locationManager: LocationManager      private lateinit var searchButton:FloatingActionButton +    private lateinit var gpsButton:FloatingActionButton      private lateinit var searchBar: EditText +    var client: FusedLocationProviderClient? = null      override fun onCreate(savedInstanceState: Bundle?) {          super.onCreate(savedInstanceState) @@ -60,13 +65,16 @@ class FragmentBrowse : Fragment(R.layout.fragment_browse) {          map!!.setTileSource(TileSourceFactory.MAPNIK);          setUpMap()          searchButton=v.findViewById<View>(R.id.FragmentBrowseSearchButton) as FloatingActionButton +        gpsButton=v.findViewById<View>(R.id.FragmentBrowseMyLocation) as FloatingActionButton          searchBar=v.findViewById<View>(R.id.FragmentBrowseSearchBar) as EditText - +        client=LocationServices.getFusedLocationProviderClient(requireActivity())          searchButton.setOnClickListener{              searchMap() -        } - +        } +        gpsButton.setOnClickListener{ +            getLocation() +        }          return v      } @@ -156,6 +164,116 @@ class FragmentBrowse : Fragment(R.layout.fragment_browse) {              }          }      } +    private fun getLocation() { +        if (ContextCompat.checkSelfPermission( +                requireActivity(), +                Manifest.permission +                    .ACCESS_FINE_LOCATION) +            == PackageManager +                .PERMISSION_GRANTED +            && ContextCompat.checkSelfPermission( +                requireActivity(), +                Manifest.permission +                    .ACCESS_COARSE_LOCATION) +            == PackageManager +                .PERMISSION_GRANTED) { +            // When permission is granted +            // Call method +            getCurrentLocation() +        } +        else { +            requestPermissions( +                arrayOf( +                    Manifest.permission.ACCESS_FINE_LOCATION, +                    Manifest.permission.ACCESS_COARSE_LOCATION +                ), +                111 +            ) + +        } +    } +    override fun onRequestPermissionsResult( +        requestCode: Int, permissions: Array<String?>, +        grantResults: IntArray +    ) { +        super.onRequestPermissionsResult( +            requestCode, permissions, grantResults +        ) +        // Check condition +        if (requestCode == 111 && grantResults.size > 0 +            && (grantResults[0] + grantResults[1] +                    == PackageManager.PERMISSION_GRANTED) +        ) { +            // When permission are granted +            // Call  method +            getCurrentLocation() +        } else { +            // When permission are denied +            // Display toast +            Toast +                .makeText( +                    activity, +                    "Permission denied", +                    Toast.LENGTH_SHORT +                ) +                .show() +        } +    } +    @Suppress("MissingPermission") +    private fun getCurrentLocation(){ +        val locationManager = requireActivity() +            .getSystemService( +                Context.LOCATION_SERVICE +            ) as LocationManager +        checkLocPerm() +        if (locationManager.isProviderEnabled( +                LocationManager.GPS_PROVIDER) +            || locationManager.isProviderEnabled( +                LocationManager.NETWORK_PROVIDER)){ + +            client!!.getLastLocation().addOnCompleteListener {task -> +                var location = task.result +                if(location == null) { +                    val locationRequest: LocationRequest = LocationRequest() +                        .setPriority( +                            LocationRequest.PRIORITY_HIGH_ACCURACY +                        ) +                        .setInterval(10000) +                        .setFastestInterval( +                            1000 +                        ) +                        .setNumUpdates(1) + +                    val locationCallback: LocationCallback = object : LocationCallback() { +                        override fun onLocationResult( +                            locationResult: LocationResult +                        ) { +                            // Initialize +                            // location +                            val location1: Location? = locationResult +                                .lastLocation +                            // Set latitude +                            map!!.controller.animateTo(GeoPoint(location1!!.latitude,location1!!.longitude)) +                            Toast.makeText(requireContext()," "+location1!!.latitude,Toast.LENGTH_LONG) + +                        } +                    } +                    client!!.requestLocationUpdates( +                        locationRequest, +                        locationCallback, +                        Looper.myLooper()); +                } else { +                    map!!.controller.animateTo(GeoPoint(location!!.latitude,location!!.longitude)) +                    Toast.makeText(requireContext()," "+location.latitude,Toast.LENGTH_LONG) +                } + + + +        } +    } + + +}  }
\ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_browse.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_browse.xml index cdccaa6..5f20c5f 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_browse.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_browse.xml @@ -45,5 +45,20 @@          app:rippleColor="#FFFFFF"          app:srcCompat="@android:drawable/ic_search_category_default" /> +    <com.google.android.material.floatingactionbutton.FloatingActionButton +        android:id="@+id/FragmentBrowseMyLocation" +        android:layout_width="wrap_content" +        android:layout_height="wrap_content" +        android:layout_alignParentStart="true" +        android:backgroundTint="#FFFFFF" +        android:layout_marginBottom="80dp" +        android:clickable="true" +        android:focusable="true" +        android:tint="#FFFFFF" +        app:layout_constraintBottom_toBottomOf="@+id/FragmentBrowseMapView" +        app:layout_constraintEnd_toEndOf="parent" +        app:rippleColor="#FFFFFF" +        app:srcCompat="@android:drawable/ic_menu_mylocation" /> +  </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file | 
