安卓谷歌地图V2用户位置

5
我的地图上没有显示蓝色的点/箭头。其他功能都正常。我是否缺少某些权限?
包括Java类、清单和布局XML。
private void setUpMap(int satelliteMode, LatLng startPoint, float zoomLevel) {

        mapView.getUiSettings().setZoomControlsEnabled(false);
        //mapView.getUiSettings().setMyLocationButtonEnabled(false);
        mapView.setMapType(satelliteMode);
        mapView.setMyLocationEnabled(true);
        mapView.moveCamera(CameraUpdateFactory.newLatLngZoom(startPoint, zoomLevel));
    }

xml:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/mapview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.SupportMapFragment"/>

清单:

<permission
         android:name="com.example.project.MAPS_RECEIVE"
         android:protectionLevel="signature"/>
    <uses-permission  android:name="com.example.project.MAPS_RECEIVE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-feature android:glEsVersion="0x00020000" android:required="true"/>

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >

        <meta-data
           android:name="com.google.android.maps.v2.API_KEY"
           android:value="API_KEY"/>

它能在这个设备上与Google Maps应用程序一起使用吗?在较新版本的Android中存在一个问题,您必须通过设置应用程序中的帐户区域专门授予Google Maps权限才能使用GPS。这也可能影响V2地图内容。 - CommonsWare
不幸的是,在我的三星Galaxy S2上,Google地图应用程序中的蓝点显示正常。 - Mark Molina
我的应用程序中的设备设置甚至显示该应用程序可以访问“您的位置”(还具有“网络通信”)。 - Mark Molina
1
我想指出的是,我目前遇到了几乎相同代码的完全相同问题:/ - Emil Sjölander
所以没有人有解决方案吗?希望安卓很快修复这个问题。 - Mark Molina
4个回答

3

如果您点击“我的位置”按钮,您会看到一个蓝色的圆点出现在您当前的位置。使用位置管理器来跟踪位置更新并相应地移动摄像头,也可以无需点击按钮来跟踪用户。请参见下面的片段。

LocationListener ll = new LocationListener() {

        @Override
        public void onLocationChanged(Location arg0) {
            Toast.makeText(getBaseContext(), "Moved to "+arg0.toString(), Toast.LENGTH_LONG).show();
            CameraPosition cp = new CameraPosition.Builder()
            .target(new LatLng(arg0.getLatitude(),arg0.getLongitude()))
            .zoom(12)
            .build();     
            map.animateCamera(CameraUpdateFactory.newCameraPosition(cp));
        }
}

你要在哪里注册这个监听器?是在LocationManager系统服务上而不是Map上吗? - dnkoutso
是的,LocationManager,例如:LocationManager.requestLocationUpdates(provider, time, distance, LocationListener); - soujisama
@MarkMolina 你是如何初始化mapView的?我使用以下代码: GoogleMap map = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); - soujisama
关于您的最后一行代码,moveCamera(),您应该知道,虽然setMyLocationEnabled()应该绘制蓝色标记,但它实际上并不会尝试将标记保持在可见范围内。 - soujisama
标准位置按钮不会自动缩放到当前位置吗?它是默认启用的,但为了确保: mapView.getUiSettings().setMyLocationButtonEnabled(true); - Mark Molina
显示剩余4条评论

0

嗨,在你的FragmentActivity中添加implements LocationListener

private LocationManager locationManager;

onCreate(Bundle savedInstanceState) 中添加...
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

Criteria locationCriteria = new Criteria();
locationCriteria.setAccuracy(Criteria.ACCURACY_FINE);       locationManager.requestLocationUpdates(locationManager.getBestProvider(locationCriteria, true), 1L, 2F, this);

并实现了 LocationListener 的方法 ;)


0

出于某种原因,它就起作用了。我去吃午饭,把应用程序留在那里。当我回来时,蓝色箭头已经画在地图上了。虽然不是在正确的位置,但它已经在地图上了。所以我的发布的代码是有效的。只需要从位置管理器更新即可。


当我运行你的代码时,它给了我一个错误:java.lang.ClassCastException: android.support.v4.app.NoSaveStateFrameLayout 无法转换为 com.google.android.gms.maps.MapView。我使用的是Google Inc.的Google APIs:10和MAP V2。 - Big.Child

0

顺便说一下,我在三星Galaxy Tab 2上遇到了与原帖相同的问题。 然而,在Archos 101G9上我没有这个问题。

如果我重新启动,使用Google Maps v2加载我的应用程序并单击右上角的“转到我的位置”按钮,则Archos会直接转到我的当前位置,但SGT2什么也不做。

如果我手动使用位置管理器获取我的当前位置并将地图动画显示出来,那么它就可以导航。但是,点击“转到我的位置”按钮仍然没有任何反应。

使用GPS获取位置修复似乎可以解决此问题。

编辑: 在SGT2上,只有通过GPS修复才会出现蓝色定位点,但是Archos会显示具有移动数据/ WiFi修复的蓝色点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接