繁体   English   中英

从我自己的 Android 应用程序单击我的 Google 地图活动中的标记时打开浏览器 url

[英]Opening browser url when clicking a marker in my Google Maps Activity from my own Android App

我正在为一个大学项目做某种艺术收藏家应用程序,直到现在学习 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 尚未修改。

当您使用 addmarker 将标记添加到addmarker ,该方法将返回Marker object。 因此,假设您的代码如下所示:

Marker myMarker = mMap.addMarker(new MarkerOptions().position(louvre).title("French Musée du Louvre"));

现在有了myMarker object,您现在可以将单个数据(它称为tag )设置为Object实例(表示任何类型的数据),该实例将始终与该特定标记相关联。 因此,一种方法是将tag设置为与标记关联的 web 页面的 URL 页面。

我假设您在一次性用品上有标记的 URL,因此代码将继续以卢浮宫 web 为例:

// Note the URL constructor can throw an MalformedException so you should handle that.
myMarker.setTag(new URL("https://www.louvre.fr/en/"));

对您添加的每个标记重复此操作。

好的 - 这涵盖了添加标记时所需的内容。

现在来处理标记点击。 整个 map 实例有一个标记单击处理程序,它的设置如下(可能在您的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回调中),您现在可以启动一个意图,为该 ZE6B391A8D2C4D45902A23A8B6 调出 web 浏览器

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM