ch1: marker 和 change color
kotlin
package branch.feature.googlemap_api_learn.ch1;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.example.mynewsapp.R;
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.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {
private GoogleMap myMap;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_ch1);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.gMap);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(@NonNull GoogleMap googleMap) {
myMap = googleMap;
LatLng sydney = new LatLng(-34, 151);
// it works
myMap.addMarker(new MarkerOptions().position(sydney).title("Sydney"));
myMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
// change color
MarkerOptions options = new MarkerOptions()
.position(sydney).title("悉尼");
options.icon(BitmapDescriptorFactory.defaultMarker(
// here change color style
BitmapDescriptorFactory.HUE_MAGENTA));
myMap.addMarker(options);
}
}
ch2: 我的位置
kotlin
package branch.feature.googlemap_api_learn.ch2;
import android.Manifest;
import android.content.pm.PackageManager;
import android.location.Location;
import android.os.Bundle;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import com.example.mynewsapp.R;
import com.google.android.gms.location.FusedLocationProviderClient;
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.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
// 我的位置
public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {
private final int FINE_PERMISSION_CODE = 1;
private GoogleMap myMap;
Location currentLocation;
FusedLocationProviderClient fusedLocationProviderClient;
@Override
public void onMapReady(@NonNull GoogleMap googleMap) {
myMap = googleMap;
LatLng me = new LatLng(currentLocation.getLatitude(), currentLocation.getLongitude());
myMap.addMarker(new MarkerOptions().position(me).title("我的位置"));
myMap.moveCamera(CameraUpdateFactory.newLatLng(me));
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_ch2);
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
getLastLocation();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == FINE_PERMISSION_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
getLastLocation();
} else {
Toast.makeText(this, "位置未授权", Toast.LENGTH_SHORT).show();
}
}
}
private void getLastLocation() {
// handle permission
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]
{Manifest.permission.ACCESS_FINE_LOCATION,}, FINE_PERMISSION_CODE);
return;
}
Task<Location> task = fusedLocationProviderClient.getLastLocation();
task.addOnSuccessListener(new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if (location != null) {
// set my location
currentLocation = location;
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.gMap);
mapFragment.getMapAsync(MainActivity.this);
}
}
});
}
}
ch3: 查找位置和移动相机
kotlin
package branch.feature.googlemap_api_learn.ch3;
import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import android.widget.SearchView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.example.mynewsapp.R;
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 java.util.List;
// 查找位置
public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {
private GoogleMap myMap;
private SearchView mySearchView;
@Override
public void onMapReady(@NonNull GoogleMap googleMap) {
myMap = googleMap;
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_ch3);
mySearchView = findViewById(R.id.mapSearch);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.gMap);
mySearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
String location = mySearchView.getQuery().toString();
List<Address> addressList = null;
if (location != null) {
Geocoder geocoder = new Geocoder(MainActivity.this);
try {
addressList = geocoder.getFromLocationName(location, 1);
} catch (Exception e) {
e.printStackTrace();
}
Address address = addressList.get(0);
LatLng latLng = new LatLng(address.getLatitude(), address.getLongitude());
myMap.addMarker(new MarkerOptions().position(latLng).title(location));
myMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 100));
}
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
});
mapFragment.getMapAsync(MainActivity.this);
}
}
ch4: 切换地图类型
kotlin
package branch.feature.googlemap_api_learn.ch4;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.example.mynewsapp.R;
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.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
// 创建不同的地图类型
// None, Normal, Satellite Map, Hybrid Map
public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {
private GoogleMap myMap;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_ch4);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.gMap);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(@NonNull GoogleMap googleMap) {
myMap = googleMap;
LatLng one = new LatLng(11, 11);
myMap.moveCamera(CameraUpdateFactory.newLatLng(one));
MarkerOptions options = new MarkerOptions().position(one).title("one");
options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_CYAN));
myMap.addMarker(options);
// 启用一下
myMap.getUiSettings().setZoomControlsEnabled(true);
myMap.getUiSettings().setCompassEnabled(true);
myMap.getUiSettings().setZoomGesturesEnabled(true);
myMap.getUiSettings().setScrollGesturesEnabled(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_ch4, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
if (id == R.id.mapNone) {
myMap.setMapType(GoogleMap.MAP_TYPE_NONE);
} else if (id == R.id.mapNormal) {
myMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
} else if (id == R.id.mapSatellite) {
myMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
} else if (id == R.id.mapHybrid) {
myMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
} else if (id == R.id.mapTerrain) {
myMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
}
return super.onOptionsItemSelected(item);
}
}
ch5: 跳转到谷歌地图app
kotlin
package branch.feature.googlemap_api_learn.ch5;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.example.mynewsapp.R;
// 跳转谷歌地图,
public class MainActivity extends AppCompatActivity {
private EditText edFromLocation;
private EditText edToLocation;
private Button btCheck;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_ch5);
edFromLocation = findViewById(R.id.edFrom);
edToLocation = findViewById(R.id.edTo);
btCheck = findViewById(R.id.btCheck);
btCheck.setOnClickListener(view -> {
String userLocation = edFromLocation.getText().toString();
String userDestination = edToLocation.getText().toString();
if (userDestination.equals("") || userDestination.equals("")) {
Toast.makeText(this, "fill the text", Toast.LENGTH_SHORT).show();
} else {
getDirection(userLocation, userDestination);
}
});
}
private void getDirection(String userLocation, String userDestination) {
try {
// 跳转到谷歌地图
Uri uri = Uri.parse("https://www.google.com/maps/dir/" + userLocation + "/"
+ userDestination);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.setPackage("com.google.android.apps.maps");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} catch (ActivityNotFoundException e) {
e.printStackTrace();
}
}
}
ref link: