The*_*zer 6 java android google-maps overlay geolocation
我的代码应该找出用户位置,并在进入应用程序时在地图上放置标记.我的位置值始终等于null,并且永远不会收到值.
if (location != null) {
lat = (int) (location.getLatitude() * 1E6);
longi = (int) (location.getLongitude() * 1E6);
GeoPoint ourLocation = new GeoPoint(lat, longi);
OverlayItem overlayItem = new OverlayItem(ourLocation, "AYO",
"Whats good yo");
CustomPinpoint custom = new CustomPinpoint(d, CampusMap.this);
custom.insertPinpoint(overlayItem);
overlayList.add(custom);
} else {
Toast.makeText(CampusMap.this, "Couldn't get provider",
Toast.LENGTH_SHORT).show();
}
}
Run Code Online (Sandbox Code Playgroud)
我在制作 GPS RPG 时也遇到过类似的问题,以下是我注意到的一些事情:
首先,最初可能需要一段时间才能找到您的位置,这会导致该问题,因为您只检查位置是否为空。
您可能还想在执行任何操作之前确保设备的位置服务确实已启用:
private boolean doLocationsCheck(){
if(!checkLocationEnabled()){
final CharSequence[] items = {"Yes", "No"};
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setCancelable(false);
builder.setTitle("Location must be enabled to play this game! Would you like to enable it now?");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
final int i = item;
runOnUiThread(new Runnable() {
public void run() {
if(i == 0){
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
quit();
}
else{
quit();
}
}
});
}
}).show();
AlertDialog alert = builder.create();
return false;
}
else {
return true;
}
}
private boolean checkLocationEnabled(){
LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
boolean enabled = service.isProviderEnabled(LocationManager.GPS_PROVIDER) || service.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
return enabled;
}
Run Code Online (Sandbox Code Playgroud)
在确保提供程序可用后,我设置了一个连接,如下所示:
private void setupLocation() {
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(final Location location) {
runOnUiThread(new Runnable() {
public void run() {
mLocation = location;
//Log.d(TAG, "Latitude: " + location.getLatitude() + " - Longitude: " + location.getLongitude());
saveLocation();
}
});
}
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
};
//Can set to GPS or network, whichever is available
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
}
Run Code Online (Sandbox Code Playgroud)
每当更新时,该位置都会设置在全局变量中,然后保存到首选项中。这样,如果提供程序已启用,但需要一段时间才能检索位置,用户仍然可以使用应用程序存储的最后已知位置继续使用应用程序(不适用于第一次使用该程序)正在运行)。
我知道我遗漏了很多东西,但我认为这并不是真正必要的,因为它要么是不言自明的,要么已经在之前的答案中解释过。
干杯~
| 归档时间: |
|
| 查看次数: |
635 次 |
| 最近记录: |