如何在osmdroid代码中设置User Agent?地图加载空白求助
解决osmdroid 5.6.5地图加载空白的问题:设置User Agent
嘿,我来帮你搞定这个地图空白的问题!你遇到的情况完全是因为没设置合法的User Agent——OSM服务器会拦截没有明确标识的请求,直接拒绝瓦片数据的返回,所以才只显示画布和缩放控件,看不到任何地图要素。
针对osmdroid 5.6.5版本,我给你两种靠谱的设置方法:
方法一:全局设置(推荐)
在自定义Application类里一次性设置,所有用到osmdroid的地方都会生效:
- 创建一个自定义Application类:
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); // 这里替换成你的应用包名,或者加上你的联系方式,比如"YourAppName/1.0 (your.email@xxx.com)" org.osmdroid.config.Configuration.getInstance().setUserAgentValue(BuildConfig.APPLICATION_ID); } }
- 在
AndroidManifest.xml里注册这个Application,修改<application>标签:
<application android:name=".MyApplication" <!-- 其他原有配置 --> > </application>
方法二:在Activity中单独设置
如果不想自定义Application,就在你的地图Activity的onCreate最开始处设置(一定要在初始化MapView之前!):
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 先设置User Agent org.osmdroid.config.Configuration.getInstance().setUserAgentValue(BuildConfig.APPLICATION_ID); setContentView(R.layout.your_map_activity_layout); // 再初始化MapView MapView mapView = findViewById(R.id.mapview); mapView.setTileSource(TileSourceFactory.MAPNIK); // 其他地图相关配置... }
额外注意事项
- 确保你已经在
AndroidManifest.xml中声明了网络权限:
<uses-permission android:name="android.permission.INTERNET" />
如果你的应用目标SDK是23及以上,记得动态申请网络权限,不然在线地图瓦片加载会失败。
- User Agent一定要用有辨识度的值,比如应用包名或者带联系方式的标识,不要留空或用默认值,否则还是可能被OSM服务器拦截。
内容的提问来源于stack exchange,提问作者Mehdi Haghgoo
相关产品推荐
相关产品推荐

