Java tutorial
/** * * Copyright (C) 2016 Javier Castro Fernndez * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * See <http://www.gnu.org/licenses/>. * */ package havidarou.com.appgpsqr; import android.Manifest; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.location.Location; import android.location.LocationManager; import android.support.v4.app.ActivityCompat; import android.support.v4.app.FragmentActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.location.LocationServices; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; import com.google.android.gms.common.api.GoogleApiClient; public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { private GoogleMap mMap; private Double latitude; private Double longitude; private GoogleApiClient mGoogleApiClient; private Location mLastLocation; private Route route; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps); // Obtain the SupportMapFragment and get notified when the map is ready to be used. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); latitude = 0.0; longitude = 0.0; // Create an instance of GoogleAPIClient. if (mGoogleApiClient == null) { mGoogleApiClient = new GoogleApiClient.Builder(this).addConnectionCallbacks(this) .addOnConnectionFailedListener(this).addApi(LocationServices.API).build(); } // This is the listener for the button that triggers the QR code scanning Button button = (Button) findViewById(R.id.scanner); button.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { // Basically, what we do is stop this activity and start the decoder one Intent intent = new Intent(MapsActivity.this, Decoder.class); startActivity(intent); finish(); } }); // When the decoder activity returns the code, we check it here Intent intent = getIntent(); if (intent.hasExtra("code")) { //We've read a QR code String value = intent.getStringExtra("code"); TextView textView = (TextView) findViewById(R.id.textView1); // Show the value in the GUI textView.setText(value); String[] parts = value.split("_"); // Parse the latitude and longitude latitude = Double.parseDouble(parts[1]); longitude = Double.parseDouble(parts[3]); } } /** * Manipulates the map once available. * This callback is triggered when the map is ready to be used. * This is where we can add markers or lines, add listeners or move the camera. In this case, * we just add a marker near Sydney, Australia. * If Google Play services is not installed on the device, the user will be prompted to install * it inside the SupportMapFragment. This method will only be triggered once the user has * installed Google Play services and returned to the app. */ @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; // Add a marker to the new target if (latitude != 0.0 && longitude != 0.0) { // Checking if we have read a code LatLng target = new LatLng(latitude, longitude); mMap.addMarker(new MarkerOptions().position(target).title("New target!")); mMap.moveCamera(CameraUpdateFactory.newLatLng(target)); mMap.setMyLocationEnabled(true); LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return; } Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); longitude = location.getLongitude(); latitude = location.getLatitude(); // Call the route class to calculate a route route = new Route(); // And the we draw it on the map route.drawRoute(mMap, MapsActivity.this, new LatLng(latitude, longitude), target, "es"); } } @Override public void onConnected(Bundle connectionHint) { // Provides a simple way of getting a device's location and is well suited for // applications that do not require a fine-grained location and that do not need location // updates. Gets the best and most recent location currently available, which may be null // in rare cases when a location is not available. mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); if (mLastLocation != null) { } else { Toast.makeText(this, "No conection", Toast.LENGTH_LONG).show(); } } @Override public void onConnectionSuspended(int i) { } protected void onStart() { mGoogleApiClient.connect(); super.onStart(); } protected void onStop() { mGoogleApiClient.disconnect(); super.onStop(); } @Override public void onConnectionFailed(ConnectionResult connectionResult) { } }