当前位置: 首页 > news >正文

Android 11以上获取不到第三方app是否安装

开年第一篇,处理了一下年前的小问题。

问题:本地app跳转到第三方app地图进行导航,获取不到第三方地图是否安装。

解决:

1.添加包名 

This can be done by adding a <queries> element in the Android manifest.在app下的manifest文件内manifest标签下添加<queries>标签设置包名

    <queries><package android:name="com.autonavi.minimap" /><package android:name="com.baidu.BaiduMap" /><package android:name="com.tencent.map" /></queries>

2.MapUtil工具类

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;import java.io.File;public class MapUtil {public static final String PN_GAODE_MAP = "com.autonavi.minimap";// 高德地图包名public static final String PN_BAIDU_MAP = "com.baidu.BaiduMap"; // 百度地图包名public static final String PN_TENCENT_MAP = "com.tencent.map"; // 腾讯地图包名/*** 检查地图应用是否安装* @return*/public static boolean isGdMapInstalled(){return isInstallPackage(PN_GAODE_MAP);}public static boolean isBaiduMapInstalled(){return isInstallPackage(PN_BAIDU_MAP);}public static boolean isTencentMapInstalled(){return isInstallPackage(PN_TENCENT_MAP);}/*** 判断是否安装目标应用*/private static boolean isInstallPackage(String packageName) {/**判断 API版本是否大于 29(Android 11)* 判断应用是否安装(高德或者百度等),注意存储分区* 大于29会强制分区*/if (Build.VERSION.SDK_INT < 24) {return new File("/data/data/" + packageName).exists();}else {return new File("storage/emulated/0/Android/data/" + packageName).exists();}}/*** 百度转高德* @param bd_lat* @param bd_lon* @return*/public static double[] bdToGaoDe(double bd_lat, double bd_lon) {double[] gd_lat_lon = new double[2];double PI = 3.14159265358979324 * 3000.0 / 180.0;double x = bd_lon - 0.0065, y = bd_lat - 0.006;double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * PI);double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * PI);gd_lat_lon[0] = z * Math.cos(theta);gd_lat_lon[1] = z * Math.sin(theta);return gd_lat_lon;}/*** 高德、腾讯转百度* @param gd_lon* @param gd_lat* @return*/private static double[] gaoDeToBaidu(double gd_lon, double gd_lat) {double[] bd_lat_lon = new double[2];double PI = 3.14159265358979324 * 3000.0 / 180.0;double x = gd_lon, y = gd_lat;double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * PI);double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * PI);bd_lat_lon[0] = z * Math.cos(theta) + 0.0065;bd_lat_lon[1] = z * Math.sin(theta) + 0.006;return bd_lat_lon;}/*** 打开高德地图导航功能* @param context* @param slat 起点纬度* @param slon 起点经度* @param sname 起点名称 可不填(0,0,null)* @param dlat 终点纬度* @param dlon 终点经度* @param dname 终点名称 必填*/public static void openGaoDeNavi(Context context, double slat, double slon, String sname, double dlat, double dlon, String dname){String uriString = null;StringBuilder builder = new StringBuilder("amapuri://route/plan?sourceApplication=maxuslife");if (slat != 0) {builder.append("&sname=").append(sname).append("&slat=").append(slat).append("&slon=").append(slon);}builder.append("&dlat=").append(dlat).append("&dlon=").append(dlon).append("&dname=").append(dname).append("&dev=0").append("&t=0");uriString = builder.toString();Intent intent = new Intent(Intent.ACTION_VIEW);intent.setPackage(PN_GAODE_MAP);intent.setData(Uri.parse(uriString));context.startActivity(intent);}/*** 打开腾讯地图* params 参考http://lbs.qq.com/uri_v1/guide-route.html** @param context* @param slat 起点纬度* @param slon 起点经度* @param sname 起点名称 可不填(0,0,null)* @param dlat 终点纬度* @param dlon 终点经度* @param dname 终点名称 必填* 驾车:type=drive,policy有以下取值0:较快捷1:无高速2:距离policy的取值缺省为0* &from=" + dqAddress + "&fromcoord=" + dqLatitude + "," + dqLongitude + "*/public static void openTencentMap(Context context, double slat, double slon, String sname, double dlat, double dlon, String dname) {String uriString = null;StringBuilder builder = new StringBuilder("qqmap://map/routeplan?type=drive&policy=0&referer=zhongshuo");if (slat != 0) {builder.append("&from=").append(sname).append("&fromcoord=").append(slat).append(",").append(slon);}builder.append("&to=").append(dname).append("&tocoord=").append(dlat).append(",").append(dlon);uriString = builder.toString();Intent intent = new Intent(Intent.ACTION_VIEW);intent.setPackage(PN_TENCENT_MAP);intent.setData(Uri.parse(uriString));context.startActivity(intent);}/*** 打开百度地图导航功能(默认坐标点是高德地图,需要转换)* @param context* @param slat 起点纬度* @param slon 起点经度* @param sname 起点名称 可不填(0,0,null)* @param dlat 终点纬度* @param dlon 终点经度* @param dname 终点名称 必填*/public static void openBaiDuNavi(Context context,double slat, double slon, String sname, double dlat, double dlon, String dname){String uriString = null;double destination[] = gaoDeToBaidu(dlat, dlon);dlat = destination[0];dlon = destination[1];StringBuilder builder = new StringBuilder("baidumap://map/direction?mode=driving&");if (slat != 0){//起点坐标转换double[] origin = gaoDeToBaidu(slat, slon);slat = origin[0];slon = origin[1];builder.append("origin=latlng:").append(slat).append(",").append(slon).append("|name:").append(sname);}builder.append("&destination=latlng:").append(dlat).append(",").append(dlon).append("|name:").append(dname);uriString = builder.toString();Intent intent = new Intent(Intent.ACTION_VIEW);intent.setPackage(PN_BAIDU_MAP);intent.setData(Uri.parse(uriString));context.startActivity(intent);}
}

3.调用

 MapUtil. openGaoDeNavi(Context context, double slat, double slon, String sname, double dlat, double dlon, String dname);

工具类可以直接用,SelectDialog就是一个底部弹窗。

相关文章:

Android 11以上获取不到第三方app是否安装

开年第一篇&#xff0c;处理了一下年前的小问题。 问题&#xff1a;本地app跳转到第三方app地图进行导航&#xff0c;获取不到第三方地图是否安装。 解决&#xff1a; 1.添加包名 This can be done by adding a <queries> element in the Android manifest.在app下的…...

Java的编程之旅24——private私有方法

1.private的介绍 在面向对象编程中&#xff0c;private是一种访问修饰符&#xff0c;用于限制成员的访问范围。私有成员只能在所属的类内部访问&#xff0c;对外部的类或对象是不可见的。 private的使用可以带来以下几个好处&#xff1a; 封装实现细节&#xff1a;私有成员可…...

为什么在MOS管开关电路设计中使用三极管容易烧坏?

MOS管作为一种常用的开关元件&#xff0c;具有低导通电阻、高开关速度和低功耗等优点&#xff0c;因此在许多电子设备中广泛应用。然而&#xff0c;在一些特殊情况下&#xff0c;我们需要在MOS管控制电路中加入三极管来实现一些特殊功能。然而&#xff0c;不同于MOS管&#xff…...

CSS的注释:以“ /* ”开头,以“ */ ”结尾

CSS的注释:以“ /* ”开头&#xff0c;以“*/”结尾 CSS的注释: 以“ /* ”开头&#xff0c;以“ */ ”结尾 在CSS中&#xff0c;注释是一种非常重要的工具&#xff0c;它们可以帮助开发者记录代码的功能、用法或其他重要信息。这些信息对于理解代码、维护代码以及与他人合作都…...

MySQL中常见的几种日志类型【重点】

在MySQL中&#xff0c;有几种不同类型的日志&#xff0c;用于记录数据库的活动和操作&#xff0c;以便于故障排查、性能调优和数据恢复等目的。以下是MySQL中常见的几种日志类型&#xff1a; 错误日志&#xff08;Error Log&#xff09;&#xff1a; 错误日志记录了MySQL服务器…...

odoo16-API(Controller)带有验证访问的接口

odoo16-API&#xff08;Controller&#xff09;带有验证访问的接口 目前我使用odoo原生的登录token来验证登陆的有效性 废话不多说直接上代码 # 测试获取session_id import requests class GetOdooData(http.Controller):def getOdooToken(self):# http://localhost:8123访问…...

Eclipse项目间的引用

我们在开发的时候&#xff0c;有时候需要把一个大的项目打散&#xff0c;尤其是现在微服务的架构很流行&#xff0c;一个大的项目往往被拆成很多小的项目&#xff0c;而有的项目作为公共工程被独立出来&#xff0c;比如有个工程专门提供各种Util工具类&#xff0c;有的工程专门…...

matplotlib使用案例3:通过自定义图例类实现图例的任意方向(行 or 列)的排列

这个方法的核心依然是基于matplotlib.legend._get_legend_handles_labels函数。然后将得到的handlers, labels进行重排,使得即使再调用Legend类的绘制方法对图例进行列排列,最终的效果也是图例的行显示,如[1、2、3、4、5、6],当指定ncols=2,Legend类的绘制方法得到的图例如…...

js设计模式:依赖注入模式

作用: 在对象外部完成两个对象的注入绑定等操作 这样可以将代码解耦,方便维护和扩展 vue中使用use注册其他插件就是在外部创建依赖关系的 示例: class App{constructor(appName,appFun){this.appName appNamethis.appFun appFun}}class Phone{constructor(app) {this.nam…...

【性能最佳实践】事务处理和读写策略原来这么关键!

MongoDB针对初级&#xff0c;中级及熟练的技术开发人员推出系列技术文章与行业案例。深入浅出地剖析MongoDB产品基础原理&#xff0c;使用技巧&#xff0c;典型行业场景及应用&#xff0c;还有Code Demo及线上线下活动推荐&#xff01; 欢迎阅读有关MongoDB性能最佳实践的系列…...

【广度优先搜索】【网格】【割点】【 推荐】1263. 推箱子

作者推荐 视频算法专题 涉及知识点 广度优先搜索 网格 割点 并集查找 LeetCode:1263. 推箱子 「推箱子」是一款风靡全球的益智小游戏&#xff0c;玩家需要将箱子推到仓库中的目标位置。 游戏地图用大小为 m x n 的网格 grid 表示&#xff0c;其中每个元素可以是墙、地板或…...

开店怎么做进销存

开设一家店铺&#xff0c;无论是实体店还是网店&#xff0c;进销存管理都是确保店铺正常运营和盈利的关键环节。一款良好的进销存管理软件可以帮助你更好地掌握库存情况、优化采购策略、提高销售效率&#xff0c;并最终实现盈利目标。那么&#xff0c;开店怎么做进销存管理呢&a…...

UE4 C++联网RPC教程笔记(三)(第8~9集)完结

UE4 C联网RPC教程笔记&#xff08;三&#xff09;&#xff08;第8~9集&#xff09;完结 8. exe 后缀实现监听服务器9. C 实现监听服务器 8. exe 后缀实现监听服务器 前面我们通过蓝图节点实现了局域网连接的功能&#xff0c;实际上我们还可以给项目打包后生成的 .exe 文件创建…...

程序员一定要远离“钻研技术无用,搞钱才是正道”的言论

不知道大家有没有刷到过这样的言论&#xff1a; &#xff02;程序员真的不要花大量时间研究底层代码&#xff0c;技术钻研的再高级再牛也逃不过被优化的下场。 前辈们开发一个功能用一天&#xff0c;我开发一个功能得用一个星期&#xff0c;只会显得我像一个技术菜鸟&#xff0…...

el-table同时固定左列和右列时,出现错误情况

最近遇到一个问题,就是需求是要求表格同时固定序号列和操作列,我们用的是饿了么组件库的el-table,如下图,出现了错误情况: 解决方法就是使用doLayout方法: 如果使用了keep-alive,可以在activated里执行doLayout方法: activated() {this.$nextTick(() => {this.$ref…...

django自定义后端过滤

​ DRF自带的过滤 第一个 DjangoFilterBackend 是需要安装三方库见[搜索&#xff1a;多字段筛选]两外两个是安装注册了rest_framework就有。 如上图&#xff0c;只要配置了三个箭头所指的方向&#xff0c;就能使用。 第一个单字段过滤 用户视图集中加上filterset_fields …...

计算机网络Day03--物理层

信道复用技术 频分复用 时分复用 统计时分复用 频分复用&#xff08;FDM&#xff09; 最基本 将整个宽带分为多份&#xff0c;用户在分配到一定的频带后&#xff0c;在通信过程中自始至终都使用这个频带 所有的用户在同一时间占用不同的带宽资源&#xff0c;以并行的方式工…...

RabbitMQ节点故障的容错方案

RabbitMQ节点故障的容错方案 1. broker启动加载逻辑1.1 日志文件1.2 broker启动流程1.2.1 整体流程1.2.2 数据恢复流程 2. 队列高可用2.1 选主逻辑2.1.1 从节点晋升策略2.1.2 主队列选择策略 2.2 HA切换 3. 疑问和思考3.1 如果一个broker宕机&#xff0c;运行在broker上的队列数…...

瑞_Redis_初识Redis(含安装教程)

文章目录 1 初识Redis1.1 认识NoSQL1.1.1 结构化与非结构化1.1.2 关联和非关联1.1.3 查询方式1.1.4 事务1.1.5 总结 1.2 认识Redis1.2.1 介绍1.2.2 特征1.2.3 优势 1.3 安装Redis ★★★1.3.1 Linux安装Redis1.3.1.1 安装Redis依赖 1.3.2 Windows安装Redis1.3.2.1 安装步骤1.3.…...

Android进阶(二十九) 走近 IntentFilter

文章目录 一、什么是IntentFilter &#xff1f;二、IntentFilter 如何过滤隐式意图&#xff1f;2.1 动作测试2.2 类别测试2.3 数据测试 一、什么是IntentFilter &#xff1f; 如果一个 Intent 请求在一片数据上执行一个动作&#xff0c; Android 如何知道哪个应用程序&#xf…...

vue+element下日期组件momentjs转换赋值问题

记录下使用momentjs转换日期字符串赋值给element的日期组件报错问题&#xff1b; <el-date-pickerv-model"form.serviceTime"type"date"class"fill-w mar-t-xs"value-format"yyyy-MM-dd HH:mm:ss"placeholder"请选择日期&quo…...

普源(RIGOL) DHO914S示波器 简单开箱评测

普源精电(RIGOL) DHO914S 12bit数字示波器 简单开箱评测。 旧的示波器感觉不好用&#xff0c;所以换个新的&#xff0c;看中了普源的这款&#xff0c;主要看中它便携支持PD供电&#xff0c;还有伯德图功能&#xff0c;以及12bit的垂直分辨率。如果你对我上面说的点没需求&…...

docker 安装Oracle19c

一、下载镜像 docker pull registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c通过docker images 命令查看 如下图&#xff1a;已经有oracle 19c镜像。 二、创建挂载文件 # 创建文件 mkdir -p /home/data/oracle/oradata# 授权&#xff0c;不授权会导致后面安装失败 c…...

qt-OPENGL-星系仿真

qt-OPENGL-星系仿真 一、演示效果二、核心程序三、下载链接 一、演示效果 二、核心程序 #include "model.h"Model::Model(QOpenGLWidget *_glWidget) { glWidget _glWidget;glWidget->makeCurrent();initializeOpenGLFunctions(); }Model::~Model() {destroyV…...

Java实战:Spring Boot实现AOP记录操作日志

本文将详细介绍如何在Spring Boot应用程序中使用Aspect Oriented Programming&#xff08;AOP&#xff09;来实现记录操作日志的功能。我们将探讨Spring Boot集成AOP的基本概念&#xff0c;以及如何使用Spring Boot实现AOP记录操作日志。最后&#xff0c;我们将通过一个具体示例…...

C++ //练习 7.38 有些情况下我们希望提供cin作为接受istream参数的构造函数的默认实参,请声明这样的构造函数。

C Primer&#xff08;第5版&#xff09; 练习 7.38 练习 7.38 有些情况下我们希望提供cin作为接受istream&参数的构造函数的默认实参&#xff0c;请声明这样的构造函数。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 Sa…...

算法:两数之和

算法&#xff1a;两数之和 方法一&#xff1a;暴力法 function twoSum(nums, target) {for (let i 0; i < nums.length; i) {for (let j i 1; j < nums.length; j) {if (nums[i] nums[j] target) {return [i, j];}}}return null; }方法二&#xff1a;哈希表 func…...

pytorch: ground truth similarity matrix

按照真实标签排序pair-wise相似度矩阵的Pytorch代码 本文仅作留档&#xff0c;用于输出可视化 Inputs: Ground-truths Y ∈ R n 1 \mathbf{Y}\in\mathbb R^{n\times 1} Y∈Rn1, Similarity matrix A ∈ R n n \mathbf{A}\in\mathbb R^{n\times n} A∈RnnOutputs: Block dia…...

鸿蒙 gnss 开关使能流程

先WiFi&#xff0c;后 定位&#xff0c;再从蓝牙到NFC&#xff0c;这个就是我大致熟悉开源鸿蒙代码的一个顺序流程&#xff0c;WiFi 的年前差不多基本流程熟悉了&#xff0c;当然还有很多细节和内容没有写到&#xff0c;后续都会慢慢的丰富起来&#xff0c;这一篇将开启GNSS的篇…...

设计模式-创建型模式-抽象工厂模式

抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;&#xff1a;提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无须指定它们具体的类。抽象工厂模式又称为Kit模式&#xff0c;它是一种对象创建型模式。 由于工厂方法模式中的每个工厂只生产一类产品&…...