【发布时间】:2017-07-15 07:32:10
【问题描述】:
美好的一天!
我目前正在做一个应用程序,如果用户当前的 GPS 位置在某个位置的半径范围内,它将返回 toast 或通过意图激活另一个活动。
目前,使用 Google 标记,我可以检测标记并确定它是在半径之外还是在半径内。但是,当我尝试使用当前 GPS 位置执行此操作时,它会强制关闭,而 Android Studio 不会出现任何错误。
这是我当前的 Google 地图代码:
public void onMapReady(GoogleMap googleMap) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.INTERNET,
Manifest.permission.ACCESS_NETWORK_STATE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
}, 10);
}
return;
}
gMap = googleMap;
if(!gMap.isMyLocationEnabled())
gMap.setMyLocationEnabled(true);
LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location myLocation = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (myLocation == null) {
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
String provider = lm.getBestProvider(criteria, true);
myLocation = lm.getLastKnownLocation(provider);
}
if(myLocation != null){
LatLng userLocation = new LatLng(myLocation.getLatitude(), myLocation.getLongitude());
gMap.animateCamera(CameraUpdateFactory.newLatLngZoom(userLocation, 14), 1500, null);
}
Marker marker1 = googleMap.addMarker(
new MarkerOptions()
.position(new LatLng(14.6036,120.9834))
.title("Recto Station")
);
Circle c_recto = gMap.addCircle(new CircleOptions()
.center(new LatLng(14.6036,120.9834))
.radius(100)
.strokeColor(0x7F00FF00)
.fillColor(0x7F00FF00)
);
这是有效的谷歌标记的代码:
float[] distance_recto = new float[2];
Location.distanceBetween( marker1.getPosition().latitude, marker1.getPosition().longitude,
c_recto.getCenter().latitude, c_recto.getCenter().longitude, distance_recto);
if( distance_recto[0] < c_recto.getRadius() ){
Toast.makeText(getBaseContext(), "Welcome to Recto Station", Toast.LENGTH_LONG).show();
} else {
Intent intent = new Intent(this, PollWebView.class);
startActivity(intent);
Toast.makeText(getBaseContext(), "Welcome to Recto Station", Toast.LENGTH_LONG).show();
这是交换的 Google 标记代码,以获取用户的当前 GPS 位置,并在打开 Google 地图时强制关闭:
float[] distance_recto = new float[2];
Location.distanceBetween( myLocation.getLatitude(), myLocation.getLongitude(),
c_recto.getCenter().latitude, c_recto.getCenter().longitude, distance_recto);
if( distance_recto[0] < c_recto.getRadius() ){
Toast.makeText(getBaseContext(), "Welcome to Recto Station", Toast.LENGTH_LONG).show();
} else {
Intent intent = new Intent(this, PollWebView.class);
startActivity(intent);
Toast.makeText(getBaseContext(), "Welcome to Recto Station", Toast.LENGTH_LONG).show();
【问题讨论】:
标签: android google-maps google-maps-api-3 gps location