【问题标题】:Android MapView not loading tiles on devicesAndroid MapView 未在设备上加载图块
【发布时间】:2011-09-24 14:48:51
【问题描述】:

我正在编写一个使用 Google Maps MapView 来显示地图的 Android 应用程序。该应用程序在模拟器中运行良好,但是当我尝试在实际设备上运行它时,它不会加载任何地图图块。

我已经做了以下事情:

  • 检查 Eclipse ADT 是否配置了默认调试密钥库
  • 我已针对调试密钥库重新生成了 Google Maps API 密钥
  • 检查了应用程序是否可以访问互联网,因为该应用程序还连接到不同的服务器并且工作正常。
  • 我已经检查并重新检查了在其他类似问题中找到的所有提示,但如果我遗漏了任何内容,我已经附加了 res/layout 文件和 android 清单文件。

布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainlayout"
    android:orientation="vertical"
    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:clickable="true"
        android:apiKey="0AVJ6OY3X1uWHCbkTOJx7ajC-TWI44phQofTSlg"
    />                  
</RelativeLayout>

Android 清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.android"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-sdk android:minSdkVersion="7" />

    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
        <uses-library android:name="com.google.android.maps" android:required="true"/>
        <activity android:name="DummyMap"
                  android:label="@string/app_name">
        </activity>        
        <activity android:name="Dummy" android:label="@string/app_name" android:theme="@android:style/Theme.Light">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>        
        </activity>
        <activity android:name="ContactActivity" android:theme="@android:style/Theme.Light"></activity>
        <activity android:name="DummyPreferences"></activity>
    </application>
</manifest>

欢迎任何提示,因为我现在必须随机尝试对这些文件进行更改以查看是否有效。

【问题讨论】:

  • 现在看来它实际上在模拟器中也不起作用。它只有一些缓存的切片。这有点帮助,但我仍然不明白可能出了什么问题。 MapViewDemo 也适用于 API 密钥,因此应该是正确的。

标签: android google-maps android-mapview


【解决方案1】:

我在 Android 参考文档中看到 (http://developer.android.com/reference/android/Manifest.permission.html#ACCESS_COARSE_LOCATION):

ACCESS_COARSE_LOCATION 允许应用程序访问粗略(例如, 小区 ID、WiFi)位置

但是因为你是在设备上运行应用程序,所以你应该添加额外的权限:ACCESS_FINE_LOCATION 因为有了这个权限,你的设备可以通过 GPS 获取位置

ACCESS_FINE_LOCATION 允许应用程序正常访问(例如 GPS) 位置

【讨论】:

  • 根据developer.android.com/guide/topics/location/…,WiFi 和 GPS 都只需要 ACCESS_FINE_LOCATION。
  • 让我们澄清一下:为了从 NETWORK_PROVIDER 或 GPS_PROVIDER 接收位置更新,您必须通过在 Android 清单文件中分别声明 ACCESS_COARSE_LOCATION 或 ACCESS_FINE_LOCATION 权限来请求用户权限。这意味着如果您想通过网络(例如:WiFi)获取当前位置,则必须声明 ACCESS_COARSE_LOCATION,但如果您想通过 GPS 获取位置,则声明 ACCESS_FINE_LOCATION 权限。您的应用在模拟器上运行良好,因为在 Emu 中,它使用 Wifi 或网络来获取位置,但在您的设备上,我猜您使用的是 GPS。
  • 来自上面链接的 Android 文档:注意:如果您同时使用 NETWORK_PROVIDER 和 GPS_PROVIDER,那么您只需要请求 ACCESS_FINE_LOCATION 权限,因为它包含两个提供商的权限。我>
【解决方案2】:

我终于找到了问题的原因。

在我的 MapActivity 子类中,我有一个名为 super.onStop() 的 onResume() 方法!将其更改为 super.onResume() 解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    相关资源
    最近更新 更多