从我自己的 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的主要内容,如果未能解决你的问题,请参考以下文章

从我自己的服务器按需更新 Android 应用程序功能

android:我如何从我的应用程序中打开另一个应用程序?

Facebook android sdk 登录权限问题

如何从我的应用程序发送应用程序邀请(通过whatsapp、hike、消息)

当用户从我的应用程序中单击 Facebook 邀请时出现“找不到页面”

iOS 当我在自己的应用程序中单击关联域时,将启动 safari