gpt4 book ai didi

java - getLastKnownLocation() 总是返回 null,所有提供者都是 DummyLocationProvider

转载 作者:行者123 更新时间:2023-11-30 03:58:48 25 4
gpt4 key购买 nike

我看过很多关于这个问题的帖子,但没有一个给我提供解决方案。

我正在尝试通过 GPS(或最终通过任何其他有效提供商)获取用户位置。但我总是得到空位置。我确实得到了一张 map ,并且可以设置任意位置,但供应商不起作用。

我已正确设置我的 MAPS key (还检查了它是否正确),设置了所有必要的权限(android.permission.INTERNETandroid .permission.ACCESS_COARSE_LOCATION, android.permission.ACCESS_FINE_LOCATION) 事实上,昨天一切似乎都工作得很好!

我尝试使用此代码获取所有可能的提供者:

List<String> providers = locManager.getAllProviders();
for (String provider : providers) {
printProvider(provider);
}

这表明所有提供者(在我的例子中是 4 个)都是 DummyLocationProviders。

我正在尝试在手机上运行我的应用程序,而不是在模拟器上(尽管我也尝试过在启用了 GPS 的模拟器上运行,但无济于事)。

这是我用来获取位置的代码(昨天再次运行良好):

//Get criteria
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);

//Get best provider
String bestProvider = locManager.getBestProvider(criteria, false);
printProvider(bestProvider);



//get the current location (last known location) from the location manager
Location location = locManager.getLastKnownLocation(bestProvider);

//if location found display as a toast the current latitude and longitude
if (location != null) {
Toast.makeText(this, "Current location:\nLatitude: " + location.getLatitude() + "\n" + "Longitude: " + location.getLongitude(), Toast.LENGTH_LONG).show();

point = new GeoPoint((int) (location.getLatitude()*1E6),(int)(location.getLongitude() *1E6));
controller.animateTo(point);
} else {
Toast.makeText(this, "Cannot fetch current location!", Toast.LENGTH_LONG).show();
}

我的 list 文件:

 <uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="10" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".activities.MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<uses-library android:name="com.google.android.maps" />

<activity
android:name=".activities.GoogleMapsActivity"
android:label="@string/title_activity_maps" >
</activity>

<activity
android:name=".activities.MyMapsActivity"
android:label="@string/title_activity_maps" >
</activity>
</application>
</manifest>

最佳答案

试试这段代码:

  import java.io.IOException;
import java.util.List;
import java.util.Locale;

import android.content.Context;
import android.graphics.Canvas;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;

public class MyMapsActivity extends MapActivity
{

MapView mapView;
MapController mapController;
LocationManager locationManager;
LocationListener locationListener;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

mapView = (MapView) findViewById(R.id.mapView);
// enable Street view by default
mapView.setStreetView(true);

// enable to show Satellite view
// mapView.setSatellite(true);

// enable to show Traffic on map
// mapView.setTraffic(true);

mapView.setBuiltInZoomControls(true);

mapController = mapView.getController();
mapController.setZoom(5);


locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationListener = new GPSLocationListener();
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 0, 0, locationListener);
Touchy t = new Touchy();
List<Overlay> overlayList = mapView.getOverlays();
overlayList.add(t);
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}


class Touchy extends Overlay
{
public boolean onTap(GeoPoint point, MapView mapView)
{
Context contexto = mapView.getContext();
String msg = "Latitude : " + point.getLatitudeE6()/1E6 + " - " + "Longitude : " + point.getLongitudeE6()/1E6;

Toast toast = Toast.makeText(contexto, msg, Toast.LENGTH_SHORT);
toast.show();

return true;
}
}


private class GPSLocationListener implements LocationListener
{
public void onLocationChanged(Location location)
{
if (location != null)
{
GeoPoint point = new GeoPoint((int) (location.getLatitude() * 1E6),(int) (location.getLongitude() * 1E6));

Toast.makeText(getBaseContext(),"Latitude: " + location.getLatitude() + " Longitude: " + location.getLongitude(),
Toast.LENGTH_SHORT).show();

mapController.animateTo(point);
mapController.setZoom(5);
mapView.invalidate();
}

if (location != null)
{
GeoPoint point=null;
String address = ConvertPointToLocation(point);
Toast.makeText(getBaseContext(), address, Toast.LENGTH_SHORT).show();

}
}

public String ConvertPointToLocation(GeoPoint point) {
String address = "";
Geocoder geoCoder = new Geocoder(getBaseContext(), Locale.getDefault());
try {
List<Address> addresses = geoCoder.getFromLocation(point.getLatitudeE6() / 1E6,
point.getLongitudeE6() / 1E6, 1);

if (addresses.size() > 0) {
for (int index = 0;
index < addresses.get(0).getMaxAddressLineIndex(); index++)
address += addresses.get(0).getAddressLine(index) + " ";
}
}
catch (IOException e) {
e.printStackTrace();
}

return address;
}

布局编码:

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<com.google.android.maps.MapView
android:id="@+id/mapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:enabled="true"
android:clickable="true"
android:apiKey="Your MAP API Key"/>

<LinearLayout android:id="@+id/zoom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />

</RelativeLayout>

获取自己的 API key 过程的链接:

http://sanathnandasiri.blogspot.in/2011/04/obtaining-google-maps-api-key-for.html

关于java - getLastKnownLocation() 总是返回 null,所有提供者都是 DummyLocationProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12894162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com