Android APP跳转到另一个APP

news2025/2/28 3:48:03

1. Android APP跳转到另一个APP

  从当前APP去全新启动另外一个目标APP(非覆盖同一个进程)

1.1. 启动另外一个目标APP(非覆盖原来APP的方式)

  (1)当前APP加入获取权限声明:(不加入权限检查,没法启动目标app)。

 <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
        tools:ignore="QueryAllPackagesPermission" />
 <uses-permission android:name="android.permission.LAUNCH_APP" />

在这里插入图片描述

  (2)执行跳转代码:

String packageName = "com.target.package"; // 目标应用的包名
PackageManager packageManager = getPackageManager();
Intent intent=new Intent();
intent =packageManager.getLaunchIntentForPackage(packageName);
 if(intent==null){
     Toast.makeText(MainActivity.this, "未安装", Toast.LENGTH_LONG).show();
 }else{
     startActivity(intent);
 }

1.2. 从当前APP去跳转到另外一个目标APP的某个页面时:

  (1)目标APP的对应Activity中加入action

 <activity
    android:name="com.xxx.package.TargetXXActivity"
    android:exported="true">
     <intent-filter>
       <action android:name="jp" />  <!--标志-->
       <category android:name="android.intent.category.DEFAULT" />  <!--这是一个普通页面-->
      </intent-filter>
 </activity>

  (2)当前应用执行跳转到目标APP

 Intent intent = new Intent("jp");  // 标志(要和目标APP的清单文件中的标志一样)
 startActivity(intent);

  注意: Intent跳转时捕获一下异常(略),防止目标对象不存在引起崩溃。

1.3. App跳转跳到打开高德地图地图导航

  高德:打开高德地图API>开发支持>点击开发文档(居然可以点击…)>高德地图手机版(在"其他"类下)>左侧路径规划
  简单举例:

Uri uri = Uri.parse("amapuri://route/plan/?dlat="+"目的地lat"+"&dlon="+"目的地lng"+"&dname="+"目的地名称"+"&dev=0&t=0");
Activity.startActivity(new Intent(Intent.ACTION_VIEW, uri));

  可以额外拼的参数:
在这里插入图片描述

1.4. App跳转跳到打开百度地图地图导航

Uri uri = Uri.parse("baidumap://map/direction?destination=latlng:"+"目的地lat"+","+ "目的地lng"+"|name:"+"目的地名称"+"&mode=driving");
Activity.startActivity(new Intent(Intent.ACTION_VIEW, uri));

  可额外拼的参数:
在这里插入图片描述
在这里插入图片描述

1.5. App跳转跳到打开腾讯地图地图导航

//反向地址解析URI
private final String QQ_MAP_NAVI_URI = "qqmap://map/geocoder?coord=";
 
/**
 * 跳转百度地图
 */
private void jumpBaiDuMap(Context context,String lat, String lon) {
	Intent intent = new Intent();
	intent.setData(Uri.parse(QQ_MAP_NAVI_URI + lat+","+lon+"&referer="+ appKey));
	context.startActivity(intent);
}
 

1.6. app唤醒第三方地图App进行导航(高德,百度,腾讯)代码

1.6.1. 获取第三方应用包名

  高德地图包名 com.autonavi.minimap
  百度地图包名 com.baidu.BaiduMap
  腾讯地图包名 com.tencent.map

1.6.2. 坐标系的种类

  目前坐标系有三种,分别是WGS84、GCJ02、BD09,国内基本用的是后两种。
  WGS84:国际坐标系,为一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系。
  GCJ02:火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。高德、腾讯都是用的这种。
  BD09:为百度坐标系,在GCJ02坐标系基础上再次加密。其中BD09ll表示百度经纬度坐标,BD09mc表示百度墨卡托米制坐标。百度地图sdk默认输出的是BD09ll,定位sdk默认输出的是GCJ02。

1.6.3. 坐标系转换

 /**
     * BD-09 坐标转换成 GCJ-02 坐标
     */
    public static LatLng BD2GCJ(LatLng bd) {
        double x = bd.longitude - 0.0065, y = bd.latitude - 0.006;
        double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * Math.PI);
        double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * Math.PI);
 
        double lng = z * Math.cos(theta);//lng
        double lat = z * Math.sin(theta);//lat
        return new LatLng(lat, lng);
    }
 
    /**
     * GCJ-02 坐标转换成 BD-09 坐标
     */
    public static LatLng GCJ2BD(LatLng bd) {
        double x = bd.longitude, y = bd.latitude;
        double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * Math.PI);
        double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * Math.PI);
        double tempLon = z * Math.cos(theta) + 0.0065;
        double tempLat = z * Math.sin(theta) + 0.006;
        return new LatLng(tempLat, tempLon);
    }
 

1.6.4. 检测是否安装第三方地图

  在调用跳转第三方地图进行导航前需要检查手机是否安装有要跳转的第三方地图,检测方法如下,有安装返回true,否则返回false。

/**
     * 检测程序是否安装
     *
     * @param packageName
     * @return
     */
    private boolean isInstalled(String packageName) {
        PackageManager manager = mContext.getPackageManager();
        //获取所有已安装程序的包信息
        List<PackageInfo> installedPackages = manager.getInstalledPackages(0);
        if (installedPackages != null) {
            for (PackageInfo info : installedPackages) {
                if (info.packageName.equals(packageName))
                    return true;
            }
        }
        return false;
    }

1.6.4 代码

调用第三方地图导航,要先搞清楚自己使用的是那种坐标系,如果坐标系不正确,位置导航会有偏差。百度和腾讯调起使用都比较简单,结合文档和网上示例很容易实现。

    /**
     * @param latitude
     * @param longitude
     * @param title
     * @desc 导航
     */
    private void goNavigation(double latitude, double longitude, String title) {
        try {
            final double tLat = latitude;
            final double tLng = longitude;
            final String tTitle = title;
            List<MapBean> mapBeanList = new ArrayList<>();
            //高德地图
            final boolean isGaodeInstall = OpenAppUtil.checkPackInfo(this, "com.autonavi.minimap");
            //百度地图
            final boolean isBaiduInstall = OpenAppUtil.checkPackInfo(this, "com.baidu.BaiduMap");
            //腾讯地图
            final boolean isTencentInstall = OpenAppUtil.checkPackInfo(this, "com.tencent.map");
            mapBeanList.add(new MapBean(isGaodeInstall));
            mapBeanList.add(new MapBean(isBaiduInstall));
            mapBeanList.add(new MapBean(isTencentInstall));
            MapDialog mapDialog = new MapDialog(this, mapBeanList);
            mapDialog.setOnGaodeClickListener(new MyCallback() {
                @Override
                public void exec(Object... params) {
                    if (isGaodeInstall) {
                        LocateInfo locateInfo = GCJ02_WGS84.gcj02_To_Wgs84(tLat, tLng);
                        Uri uri = Uri.parse("amapuri://route/plan/?dlat=" + locateInfo.getLatitude()
                                + "&dlon=" + locateInfo.getLongitude()
                                + "&dname=" + tTitle + "&dev=1&t=1");
//                        Uri uri = Uri.parse("amapuri://route/plan/?dlat=" + tLat + "&dlon="
//                                + tLng + "&dname=" + tTitle + "&dev=1&t=1");
                        startActivity(new Intent(Intent.ACTION_VIEW, uri));
                    } else {
                        ToastHelper.showShort(LocActivity.this,
                                "高德地图未下载,请去应用市场下载高德地图后使用");
                    }
                }
            });
            mapDialog.setOnBaiduClickListener(new MyCallback() {
                @Override
                public void exec(Object... params) {
                    if (isBaiduInstall) {
                        double[] lngLat = MapUtil.gaoDeToBaidu(tLng, tLat);
                        Uri uri = Uri.parse("baidumap://map/direction?destination=latlng:"
                                + lngLat[1] + "," + lngLat[0] + "|name:"
                                + tTitle + "&mode=driving");
                        startActivity(new Intent(Intent.ACTION_VIEW, uri));
                    } else {
                        ToastHelper.showShort(LocActivity.this,
                                "百度地图未下载,请去应用市场下载百度地图后使用");
                    }
                }
            });
            mapDialog.setOnTencentClickListener(new MyCallback() {
                @Override
                public void exec(Object... params) {
                    if (isTencentInstall) {
                        Intent intent = new Intent("android.intent.action.VIEW",
                                android.net.Uri.parse("qqmap://map/routeplan?type=drive&from=&fromcoord=&to="
                                        + tTitle + "&tocoord="
                                        + tLat + "," + tLng + "&policy=0&referer=appName"));
                        startActivity(intent);
                    } else {
                        ToastHelper.showShort(LocActivity.this,
                                "腾讯地图未下载,请去应用市场下载腾讯地图后使用");
                    }
                }
            });
            mapDialog.show();
        } catch (Exception e) {
        }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2257887.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云服务的flow流水线中项目配置与运行的错误解决

在阿里云的 **Flow** 流水线中&#xff0c;遇到 "codeup服务连接已失效" 错误通常是由于 **阿里云 Codeup**&#xff08;阿里云的 Git 仓库服务&#xff09;与流水线之间的连接中断导致的。这种问题一般可以通过以下几个步骤来解决&#xff1a; ### 1. **检查 Codeu…

PHP富文本编辑器eWebEditor实战指南

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;eWebEditor是一个基于PHP的开源在线文本编辑器&#xff0c;提供类似Word的用户界面&#xff0c;简化了网页文本的创建和编辑过程。它广泛适用于博客、论坛、CMS等平台的内容管理&#xff0c;具备富文本编辑、表格…

flink yarn模式3种提交任务方式

接上文&#xff1a;一文说清flink从编码到部署上线 1.引言 Apache Hadoop的Yarn是许多数据处理框架中非常流行的资源提供者。Flink的服务提交给Yarn的ResourceManager后&#xff0c;ResourceManager会在由Yarn的NodeManager管理的机器上动态分配运行容器。Flink在这些容器上部…

【JAVA高级篇教学】第三篇:Redisson作用简介

Redisson 是一个强大的 Redis 客户端&#xff0c;不仅可以实现限流和分布式锁&#xff0c;还提供了许多其他分布式工具和功能&#xff0c;涵盖数据结构、同步控制、消息队列等多个方面。以下是 Redisson 的主要作用和使用场景&#xff1a; 目录 1. 分布式数据结构 支持的数据…

springboot413福泰轴承股份有限公司进销存系统(论文+源码)_kaic

摘 要 使用旧方法对福泰轴承股份有限公司进销存系统的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在福泰轴承股份有限公司进销存系统的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不…

Linux部署oceanbase

一、源码部署 1. 下载官网安装包 https://www.oceanbase.com/softwarecenter 2. 上传安装包并解压缩 #在/home目录下创建oceanbase文件夹 mkdir oceanbase cd oceanbase/ tar -xzf oceanbase-all-in-one-4.2.1_bp10_20241122.el7.x86_64.tar.gz 3. 安装 cd oceanbase-all-in…

分布式 分布式事务 总结

前言 相关系列 《分布式 & 目录》《分布式 & 分布式事务 & 总结》《分布式 & 分布式事务 & 问题》 分布式事务 所谓分布式事务是指操作范围笼罩多个不同节点的事务。例如对于订单节点&库存节点而言&#xff0c;一次完整的交易需要同时调动两个节…

【蓝桥杯每日一题】重新排序

重新排序 2024-12-8 蓝桥杯每日一题 重新排序 前缀和 差分 题目大意 给定一个数组 A 和一些查询 L i , R i Li_,R_i Li,​Ri​, 求数组中第 L i L_i Li​至第 R i R_i Ri​个元素之和。 小蓝觉得这个问题很无聊, 于是他想重新排列一下数组, 使得最终每个查 询结果的和尽可能…

jupyterlab 增加多个kernel,正确做法

1、背景 需要增加一个kernel然后相当于隔离一个环境 juypterlab Version 3.0.14 2、用conda 安装 例如&#xff0c;你在conda下有一个python 3.12 的环境 py312 ipython kernel install --user --namepy312 如果保持的话&#xff0c;用pip安装相应的包就好 3、检查是否配置好 …

uni-app 组成和跨端原理 【跨端开发系列】

&#x1f517; uniapp 跨端开发系列文章&#xff1a;&#x1f380;&#x1f380;&#x1f380; uni-app 组成和跨端原理 【跨端开发系列】 uni-app 各端差异注意事项 【跨端开发系列】uni-app 离线本地存储方案 【跨端开发系列】uni-app UI库、框架、组件选型指南 【跨端开…

KV Shifting Attention Enhances Language Modeling

基本信息 &#x1f4dd; 原文链接: https://arxiv.org/abs/2411.19574&#x1f465; 作者: Mingyu Xu, Wei Cheng, Bingning Wang, Weipeng Chen&#x1f3f7;️ 关键词: KV shifting attention, induction heads, language modeling&#x1f4da; 分类: 机器学习, 自然语言处…

算法-字符串-72.编辑距离

一、题目 二、思路解析 1.思路&#xff1a; 最少操作数——动态数组 res[i][j]:长度为i的字符串转化为长度为j字符串的最少操作 2.常用方法&#xff1a; 无 3.核心逻辑&#xff1a; 1.情况一&#xff1a;当word1为空&#xff0c;word2不为空时 for(int i0;i<size2;i){res[0…

云开发实战教程:手把手教你高效开发应用

声明&#xff1a;本文仅供实践教学使用&#xff0c;没有任何打广告成分 目录 1.引言 2.云开发 Copilot介绍 云开发 Copilot 的功能与特点 3.环境准备 步骤一登录账号 步骤二新建环境 4.开发实践 4.1AI 生成低代码应用 4.2AI 生成低代码页面/区块 4.3AI 优化低代码组件…

Linux笔记9 DNS域名解析服务器

简介 DNS&#xff08;Domain Name System&#xff09;是互联网上的一项服务&#xff0c;它作为将域名和IP地址相互映射的一个分 布式数据库&#xff0c;能够使人更方便的访问互联网。 DNS使用的是53端口&#xff0c; 通常DNS是以UDP这个较快速的数据传输协议来查询的&#x…

编程的“超能力”:解锁 MarsCode AI 的智能助手

文章目录 前言MarsCode AI 提供的超能力**1. 代码补全 | Code Completion**你是否曾卡在函数的中途&#xff0c;不知道下一行该怎么写&#xff1f;MarsCode AI 就是你的灵感缪斯&#xff01;示例 **2. 代码解释 | Explain Code**“这段代码是干嘛的&#xff1f;”当你面对团队老…

大数据新视界 -- 大数据大厂之 Hive 数据导入:多源数据集成的策略与实战(上)(3/ 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

提升搜索体验!—— 推出 Elastic Rerank 模型(技术预览版)

作者&#xff1a;来自 Elastic Shubha Anjur Tupil 几分钟内即可开始使用 Elastic Rerank 模型&#xff1a;强大的语义搜索功能&#xff0c;无需重新索引&#xff0c;提供灵活性和成本控制&#xff1b;高相关性、顶级性能和文本搜索效率。 使用我们全新的先进跨编码器 Elastic …

STM32+模拟或硬件IIC+SHT20驱动问题:接上拉电阻、BUSY死锁?

主要问题&#xff1a; 1&#xff0c;使用STM32F103C8T6&#xff0c;模拟IIC&#xff0c;SCL和SDA口配置为推挽输出上拉&#xff0c;主要是SDA脚&#xff0c;每次都要输出输入模式重新配置&#xff0c;虽然也能通信&#xff0c;但不稳定&#xff0c;出错率大&#xff1b; 2&…

Windows11和Ubuntu用PointNet++训练自己的数据集(部件分割模型)

省流&#xff1a; &#xff08;1&#xff09;不管是Linux还是Windows都不影响&#xff0c;只要有pycharm或者vscode即可&#xff0c;啥系统都行。 &#xff08;2&#xff09;此外由于自己的需求&#xff0c;所以只做物体部件分割&#xff08;partseg&#xff09;任务&#xff0…

【git】git回退到之前版本+拓展git命令

一、问题 git提交有时候会出错&#xff0c;想回退到之前的版本 1、命令git reset --soft <commit_id> commit_id【回退到的编号】 2、git push --force-with-lease origin <branch_name> branch_name【分支名】 二、拓展 1、git bash 1、进入任意磁盘 cd 磁盘…