flutter相关URL schemes

先看效果

使用 url_launcher库 做唤起其他app操作

url_launcher | Flutter Package

配置 安卓

flutter 项目目录下的

android\app\src\main\AndroidManifest.xml

 如果不配置的话 有些手机就打不开app

<queries>
		<!-- If your app checks for SMS support -->
		<intent>
			<action android:name="android.intent.action.VIEW" />
			<data android:scheme="sms" />
		</intent>
		<!-- If your app checks for call support -->
		<intent>
			<action android:name="android.intent.action.VIEW" />
			<data android:scheme="tel" />
		</intent>
		<intent>
			<action android:name="android.intent.action.VIEW" />
			<data android:scheme="weixin" />
		</intent>
		<intent>
			<action android:name="android.intent.action.VIEW" />
			<data android:scheme="tg" />
		</intent>
		<intent>
			<action android:name="android.intent.action.VIEW" />
			<data android:scheme="whatsapp" />
		</intent>
	</queries>

配置ios

ios\Runner\Info.plist  <dict> 标签内部新增

<key>
    LSApplicationQueriesSchemes
		</key>
		<array>
			<string>
				sms
			</string>
			<string>
				tel
			</string>
			<string>
				weixin
			</string>
			<string>
				tg
			</string>
			<string>
				whatsapp
			</string>
		</array>

使用url_launcher库

import 'dart:io';
import 'package:app/common/util/k_log_util.dart';
import 'package:url_launcher/url_launcher.dart';

import 'k_toast_util.dart';

class KDefaultUtils {
  static Future sleep(int? seconds) {
    return Future<void>.delayed(Duration(seconds: seconds ?? 1));
  }

  /// 判断文件是否存在
  static Future<bool> fileExist(String path) async {
    if (path.isEmpty) return false;
    return await File(path).exists();
  }

  /// 开的app
  static Future<void> toLaunchUrl(url) async {
    final Uri _url = Uri.parse(url);
    if (!await launchUrl(_url)) {
      throw Exception('Could not launch $_url');
    }
  }

  // 打开微信
  static Future<bool> openWx() async {
    final Uri launch = Uri.parse('weixin://');
    bool isInstall = await canLaunchUrl(launch);
    if (isInstall) {
      await launchUrl(launch);
      return true;
    } else {
      KLogUtil.d("无法进行");
      KToastUtil.showToastMsg("请先安装app");
      return false;
    }
  }

  // 打开WhatsApp
  static Future<bool> openWhatsApp(String text) async {
    final Uri launch = Uri.parse('whatsapp://send?text=$text');
    bool isInstall = await canLaunchUrl(launch);
    if (isInstall) {
      await launchUrl(launch);
      return true;
    } else {
      KLogUtil.d("无法进行");
      KToastUtil.showToastMsg("请先安装app");
      return false;
    }
  }

  // 打开推特
  static Future<bool> openTelegram() async {
    final Uri launch = Uri.parse('tg://');
    bool isInstall = await canLaunchUrl(launch);
    if (isInstall) {
      await launchUrl(launch);
      return true;
    } else {
      KLogUtil.d("无法进行");
      KToastUtil.showToastMsg("请先安装app");
      return false;
    }
  }

  // 打开手机
  static openPhoneCall([String? phoneNumber]) async {
    final Uri launchUri = Uri(
      scheme: 'tel',
      path: phoneNumber ?? "",
    );
    await launchUrl(launchUri);
  }

  // 打开短信
  static openSmS([String? phoneNumber]) async {
    final Uri launchUri = Uri(
      scheme: 'sms',
      path: phoneNumber ?? "",
    );
    await launchUrl(launchUri);
  }

  // 打开本地应用商店
  static openItmsApp() async {
    final Uri launchUri = Uri.parse('itms-apps://');
    await launchUrl(launchUri);
  }

  // webview 打开链接
  static Future<void> launchInWebViewWithoutJavaScript(Uri url) async {
    if (!await launchUrl(
      url,
      mode: LaunchMode.inAppWebView,
      webViewConfiguration: const WebViewConfiguration(enableJavaScript: true),
    )) {
      throw Exception('Could not launch $url');
    }
  }
}

 // 打开短信 自动填充 联系人和内容

  static openSmS(String body, [String? phoneNumber]) async {

    final Uri launchUri =

        Uri(scheme: 'sms', path: phoneNumber ?? "", query: "body=$body");

    await launchUrl(launchUri);

  }

自定义自己app的Schemes

android\app\src\main\AndroidManifest.xml 下 activity 标签内新增

		<intent-filter>
				<action android:name="android.intent.action.VIEW" />
				<category android:name="android.intent.category.DEFAULT" />
				<category android:name="android.intent.category.BROWSABLE" />
				<data android:scheme="konnect" />
			</intent-filter>

 ios配置

ios\Runner\Info.plist 相同的位置

<key>
			CFBundleURLTypes
		</key>
		<array>
			<dict>
				<key>
					CFBundleTypeRole
				</key>
				<string>
					Editor
				</string>
				<key>
					CFBundleURLName
				</key>
				<string>
					Two You
				</string>
				<key>
					CFBundleURLSchemes
				</key>
				<array>
					<string>
						konnect
					</string>
				</array>
			</dict>
		</array>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Web前端之NodeJS、Vue

文章目录 一、Babel转码器1.1 Babel安装流程1.2 Babel命令行转码 二、Promise对象三、测试方式四、Vue&#xff08;渐进式JS框架&#xff09;4.1 准备4.2 创建一个项目4.3 运行一个项目 五、模板语法5.1 文本5.2 原始html5.3 属性Attribute5.4 使用JavaScript表达式 六、条件渲…

禁止别人调试自己的前端页面代码

为啥要禁止&#xff1f; 由于前端页面会调用很多接口&#xff0c;有些接口会被别人爬虫分析&#xff0c;破解后获取数据 为了 杜绝 这种情况&#xff0c;最简单的方法就是禁止人家调试自己的前端代码 无限 debugger 前端页面防止调试的方法主要是通过不断 debugger 来疯狂输…

chatGPT应用于房地产行业

作为 2023 年的房地产专业人士&#xff0c;您无疑认识到技术对行业的重大影响。近年来&#xff0c;一项技术进步席卷了世界——人工智能。人工智能彻底改变了房地产业务的各个方面&#xff0c;从简化管理任务到增强客户互动。 在本文中&#xff0c;我们将探讨几种巧妙的人工智…

CEC2013(MATLAB):能量谷优化算法EVO求解CEC2013的28个函数

一、能量谷优化算法EVO 能量谷优化算法&#xff08;Energy valley optimizer&#xff0c;EVO&#xff09;是MahdiAzizi等人于2023年提出的一种新颖的元启发式算法&#xff0c;其灵感来自关于稳定性和不同粒子衰变模式的物理原理。能量谷优化算法&#xff08;Energy valley opt…

spss什么是描述性分析,以及如何去处理。

描述性分析是数据分析的第一步&#xff0c;是了解和认识数据基本特征和结构的方法&#xff0c;只有在完成了描述性统计分析&#xff0c;充分的了解和认识数据特征后&#xff0c;才能更好地开展后续更复杂的数据分析。因此&#xff0c;描述性分析是开展数据分析过程中最基础且必…

Idea添加mybatis的mapper文件模版

针对Java开发人员&#xff0c;各种框架的配置模版的确是需要随时保留一份&#xff0c;在使用的时候&#xff0c;方便复制粘贴&#xff0c;但是也依然不方便&#xff0c;我们可以给开发工具&#xff08;IDE&#xff09;中添加配置模版&#xff0c;这里我介绍下使用idea开发工具&…

高忆管理:今年来尚未有公司递表,香港SPAC市场为何“熄火”?

香港SPAC上市准则敞开之后&#xff0c;从第一家公司上市到现在已经有1年多的时刻。&#xff08;【深度】王石、李宁、卫哲争相发起建立SPAC&#xff0c;香港版“上市盲盒”会火吗&#xff1f; 界面新闻了解到&#xff0c;今年以来&#xff0c;香港SPAC并没有新动态&#xff0c;…

数据链路层 -帧结构

帧结构 802.3 有线网卡的帧格式802.11 无线网卡的帧格式 802是指一个国际标准委员会 IEEE 802 帧头主要包括三个部分&#xff1a; 目标MAC&#xff08;6个字节&#xff09;源MAC &#xff08;6个字节&#xff09;类型 &#xff08;包含两种类型&#xff1a;0x0800【IP协议】 …

麻省理工学院利用水泥和炭黑制造出超级电容器

麻省理工学院的研究人员展示了一种使用低成本水泥和炭黑的制造的超级电容器&#xff0c;这一发明可能会彻底颠覆可再生能源的存储。 ​为了解决太阳能、风能和潮汐能等间歇性和非周期性电源的普及问题&#xff0c;实用并且廉价的电力储存技术一直是重要的环节。MIT的研究人员最…

vue中全局状态存储 pinia和vuex对比 pinia比vuex更香 Pinia数据持久化及数据加密

前言 毕竟尤大佬都推荐使用pinia&#xff0c;支持vue2和vue3&#xff01; 如果熟悉vuex&#xff0c;花个把小时把pinia看一下&#xff0c;就不想用vuex了 支持选项式api和组合式api写法pinia没有mutations&#xff0c;只有&#xff1a;state、getters、actionspinia分模块不…

TartanVO: A Generalizable Learning-based VO 论文阅读

论文信息 题目:TartanVO: A Generalizable Learning-based VO 作者&#xff1a;Wenshan Wang&#xff0c; Yaoyu Hu 来源&#xff1a;ICRL 时间&#xff1a;2021 代码地址&#xff1a;https://github.com/castacks/tartanvo Abstract 我们提出了第一个基于学习的视觉里程计&…

妙盈面试(部分)

算法题1&#xff0c;二分查找即可&#xff1a; git rebase算法题2&#xff0c;求二叉树两结点的最小公共祖先 搞笑的是&#xff0c;第2道算法题我刚开始做&#xff0c;黑屏了两秒钟&#xff0c;当时其实腾讯会议软件已经崩溃了&#xff0c;但是我没注意到而是继续做题。等到做…

Stable Diffusion - 常用的负向提示 Embeddings 解析与 坐姿 (Sitting) 提示词

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132145248 负向 Embeddings 是用于提高 StableDiffusion 生成图像质量的技术&#xff0c;可以避免生成一些不符合预期的图像特征&#xff0c;比如…

推出稳定代码:人工智能辅助编码的新视野

推荐&#xff1a;使用 NSDT场景编辑器 快速助你搭建可二次编辑的3D应用场景 在不断发展的软件开发环境中&#xff0c;对效率和可访问性的追求导致了各种工具和平台的创建。最新的创新之一是StableCode&#xff0c;这是Stability AI的大型语言模型&#xff08;LLM&#xff09;生…

整理mongodb文档:改

个人博客 整理mongodb文档:改 求关注&#xff0c;求批评&#xff0c;求进步 文章概叙 本文主要讲的是mongodb的updateOne以及updateMany&#xff0c;主要还是在shell下进行操作&#xff0c;也讲解下主要的参数upsert以及更新的参数。 数据准备 本次需要准备的数据不是很多…

怎样做接口测试:从入门到精通的指南

怎样做接口测试&#xff1a;从入门到精通的指南 为什么接口测试如此重要&#xff1f; 接口测试在软件开发过程中扮演着关键的角色。它确保不同系统、组件或服务之间的无缝集成和通信。 接口测试的基本概念 接口测试是一种验证软件系统组件之间相互连接的过程。它主要关注数据…

SpringBoot 整合Druid

集成Druid Druid简介 Java程序很大一部分要操作数据库&#xff0c;为了提高性能操作数据库的时候&#xff0c;又不得不使用数据库连接池。 Druid 是阿里巴巴开源平台上一个数据库连接池实现&#xff0c;结合了 C3P0、DBCP 等 DB 池的优点&#xff0c;同时加入了日志监控。 D…

【CSS】背景图定位问题适配不同机型

需求 如图, 实现一个带有飘带的渐变背景 其中头像必须显示飘带凹下去那里 , 需要适配不同的机型, 一不下心容易错位 实现 因为飘带背景是版本迭代中更新的, 所以飘带和渐变背景实则两个div 飘带切图如下 , 圆形部分需要契合头像 <view class"box-bg"><…

C++内存管理(new与delete)

这篇文章的主要内容是new与delete的由来&#xff0c;使用new与delete对C堆内存进行管理&#xff0c;(malloc、free)与(new、delete)的区别。希望对C爱好者有所帮助&#xff0c;内容充实且干货&#xff0c;点赞收藏防止找不到&#xff01; 更多C优质内容跳转&#xff1a; 重生之…

百度秋招攻略,百度网申笔试面试详解

百度秋招简介 作为行业巨头&#xff0c;百度向社会提供的岗位一直都是非常吃香的&#xff0c;每年也都有很多考生密切关注&#xff0c;百度发布的招聘广告&#xff0c;以尽可能的让自己进入这家企业工作&#xff0c;实现自己的人生价值。那么百度每年的秋招时间是多久&#xf…