从我自己的 Android 应用程序单击我的 Google 地图活动中的标记时打开浏览器 url
Posted
技术标签:
【中文标题】从我自己的 Android 应用程序单击我的 Google 地图活动中的标记时打开浏览器 url【英文标题】:Opening browser url when clicking a marker in my Google Maps Activity from my own Android App 【发布时间】:2021-04-12 12:00:30 【问题描述】:我正在为一个大学项目制作某种艺术收藏家应用程序,直到现在学习 android 真的很有趣。即使它不在我老师的待办事项列表上,我认为如果我有一个谷歌地图活动,它会显示一些***博物馆的位置,当你点击该博物馆的标记时,它会打开浏览器该博物馆的网站。到目前为止,我创建了 Google Maps Activity 并设置了标记,但我无法弄清楚如何访问它们并在它们上放置一个 onClickListener,以及如何将其定向到网站。如果你能指出我正确的方向,我真的很感激它。所以我想更直截了当,我的问题是,我如何访问标记以及如何为每个标记设置侦听器以指向某个已知的 URL。 我现在的代码:
@Override
public void onMapReady(GoogleMap googleMap)
mMap = googleMap;
LatLng louvre = new LatLng(48.8606, 2.3376);
LatLng metropolitanMuseumOfArt = new LatLng(40.7794, -73.9632);
LatLng theNationalGallery = new LatLng(51.5089, -0.1283);
LatLng theNationalArtCenter = new LatLng(35.6653, 139.7264);
mMap.addMarker(new MarkerOptions().position(louvre).title("French Musée du Louvre"));
mMap.addMarker(new MarkerOptions().position(metropolitanMuseumOfArt).title("The Metropolitan Museum of Art"));
mMap.addMarker(new MarkerOptions().position(theNationalGallery).title("The National Gallery"));
mMap.addMarker(new MarkerOptions().position(theNationalArtCenter).title("The National Art Center"));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(louvre, 10f));
OnCreate 尚未修改。
【问题讨论】:
【参考方案1】:当您使用addmarker
向地图添加标记时,该方法返回一个Marker
对象。因此,假设您的代码如下所示:
Marker myMarker = mMap.addMarker(new MarkerOptions().position(louvre).title("French Musée du Louvre"));
现在有了myMarker
对象,您现在可以将单个数据(它称为tag
)设置为Object
实例(表示任何类型的数据),该实例将始终与该对象相关联特定标记。因此,一种方法是将tag
设置为与标记关联的网页的 URL。
我假设您在一次性用品中有标记的 URL,因此代码将继续以卢浮宫网络为例:
// Note the URL constructor can throw an MalformedException so you should handle that.
myMarker.setTag(new URL("https://www.louvre.fr/en/"));
对您添加的每个标记重复此操作。
好的 - 这涵盖了添加标记时所需的内容。
现在来处理标记点击。整个地图实例有一个标记单击处理程序,它的设置如下(可能在您的onMapReady
中)。 someMarker
参数用于区分哪个标记。 :
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener()
@Override
public boolean onMarkerClick(Marker someMarker)
// Some defensive checks
if (someMarker != null && someMarker.getTag() != null && someMarker.getTag() instanceof URL)
URL museumURL = (URL)someMarker.getTag();
// on to next part - what to do with the URL
return true;
);
现在,由于单击特定标记而获得了 URL(在 onMarkerClick
回调中),您现在可以启动一个意图,为该 URL 调出网络浏览器:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(museumURL));
// 'mContext' is your activity instance - remember you are in a callback so 'this' is not correct but 'MyActivity.this' would be correct.
mContext.startActivity(intent);
【讨论】:
以上是关于从我自己的 Android 应用程序单击我的 Google 地图活动中的标记时打开浏览器 url的主要内容,如果未能解决你的问题,请参考以下文章
如何从我的应用程序发送应用程序邀请(通过whatsapp、hike、消息)