Android 如何使用短信链接打开APP
作者:Good包籽 发布时间:2022-01-09 02:45:25
标签:Android,短信,APP
短信链接跳转APP
平时我们会收到广告短信,比如某东,某宝,里面附加着链接,当你点开链接(手机自带的浏览器),发现浏览器打开后,等一下下,就会打开对应的APP,直接到广告相应的页面。
Android端的代码
从简单的开始,第一个启动的Activity先来处理
<activity android:name=".activity.ActivityFirst">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- 不可以把上面,桌面启动图标的intent-filter,跟下面短信打开App的intent-filter写一起,否者没有桌面图标-->
<!-- 在启动的activity加入以下代码,其中scheme很重要,短信启动App的标识吧 -->
<intent-filter>
<data android:scheme="baozi" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
2.HTML代码,关键就是href,就是之前Android启动intent-filter的 “ [scheme的内容]” + “ :” 这个冒号不能少
<!DOCTYPE html>
<html>
<head>
<title>Android短信测试</title>
</head>
<body>
<a href="baozi:" rel="external nofollow" >启动程序</a>
</body>
</html>
3.测试一下,能不能启动App,我们没有服务器的情况下,可以把这段HTML代码拷贝到手机里,点击选择品牌自带浏览器启动就可以啦。
基本启动功能.gif
最基本的功能实现啦,然后我再传递参数,打开指定的页面。
1.HTML的跳转链接里面添加参数
<a href=" scheme的内容 :// host的内容?传递参数的key=传递参数的value" rel="external nofollow" >随意什么内容...</a>
<a href="baozi://bao.cn?type=red&url=111&name=红色" rel="external nofollow" rel="external nofollow" >启动红色程序</a>
<a href="baozi://bao.cn?type=yellow&name=黄色" rel="external nofollow" rel="external nofollow" >启动黄色色程序,url空</a>
<a href="baozi://bao.cn?type=green&url=333" rel="external nofollow" rel="external nofollow" >启动绿色程序,name空</a>
scheme:启动的App的标识,相当于协议吧。
host:域名,不重要。
query:传给app参数的Key和Value 。
2.Android代码,在第一启动页加入下面代码
public static final String TYPE_INTENT = "type";
public static final String URL_INTENT = "url";
public static final String NAME_INTENT = "name";
if (intent.getData() != null)
{
Uri uri = intent.getData();
uri.getScheme();//获取scheme
uri.getHost();//获取host
uri.getAuthority();//获取authority
String type = uri.getQueryParameter(TYPE_INTENT);//获取传递参数
String url = uri.getQueryParameter(URL_INTENT);
String name = uri.getQueryParameter(NAME_INTENT);
//标题转UTF-8码
if (!TextUtils.isEmpty(name))
{
try
{
name = URLDecoder.decode(name, "UTF-8");
} catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
}
参数可以传空的,如果是中文要转码,断点看看参数
3.测试。
参数跳转.gif
4.总结,短信跳转App难度不大,就是基本用原生或者chrome内核的浏览器,支持跳转,其他浏览器兼容问题会有。
5.代码不多,就直接放出来。
ActivityFirst代码
public class ActivityFirst extends AppCompatActivity
{
public static final String TYPE_INTENT = "type";
public static final String URL_INTENT = "url";
public static final String NAME_INTENT = "name";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.first_activity);
//如果是从网址打开的
Intent intent = getIntent();
if (intent.getData() != null)
{
Uri uri = intent.getData();
uri.getScheme();//获取scheme
uri.getHost();//获取host
uri.getAuthority();//获取authority
String type = uri.getQueryParameter(TYPE_INTENT);
String url = uri.getQueryParameter(URL_INTENT);
String name = uri.getQueryParameter(NAME_INTENT);
//标题转UTF-8码
if (!TextUtils.isEmpty(name))
{
try
{
name = URLDecoder.decode(name, "UTF-8");
} catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
//获取到的参数跳转
Intent intentStart = new Intent(this,ActivityMain.class);
intentStart.putExtra(TYPE_INTENT,type);
intentStart.putExtra(URL_INTENT,url);
intentStart.putExtra(NAME_INTENT,name);
startActivity(intentStart);
finish();
}
}
}
HTML代码
<!DOCTYPE html>
<html>
<head>
<title>Android短信测试</title>
</head>
<body>
<a href="baozi://bao.cn?type=red&url=111&name=红色" rel="external nofollow" rel="external nofollow" >启动红色程序</a>
<br>
<a href="baozi://bao.cn?type=yellow&name=黄色" rel="external nofollow" rel="external nofollow" >启动黄色色程序,url空</a>
<br>
<a href="baozi://bao.cn?type=green&url=333" rel="external nofollow" rel="external nofollow" >启动绿色程序,name空</a>
</body>
</html>
Manifest代码最上面有了
来源:https://www.jianshu.com/p/2ace28e1b616


猜你喜欢
- 本文实例为大家分享了Java实现通讯录管理系统的具体代码,供大家参考,具体内容如下题目:1、完成一个通讯录,需求:(1)添加联系人(联系人:
- 前言今天遇到一个问题,我们有个ip.dat二进制文件,通过里面内容可以解析ip所在的地域信息,本地单元测试都是OK的,部署到测试环境后,发现
- @schedule 注解 是springboot 常用的定时任务注解,使用起来简单方便,但是如果定时任务非常多,或者有的任务很耗时
- 一、前言介绍:1.1 课题背景 互联网发展至今,无论是其理论还是技术都已经成熟,而且
- C#将DLL打包到程序中有时候我们的程序中包含一些添加的DLL文件,使用起来不方便,我们可以把这些DLL文件打包到程序集中,只剩下一个EXE
- 显示一个计时器开始计时,当计时器到达15s的时候,停止计时。此时页面多一个重置按钮,可再次进行计时。页面布局<LinearLayout
- 目前在做项目中有处理图片的部分,参考了一下网上案例,自己写了一个获取内容中的图片地址的方法。 一般来说一个 HTML 文档有很多标
- 在 Java 中,LinkedList 和 ArrayList 的性能是不同的,具体取决于你所需要的操作。对于频繁的插入和删除操作,Link
- 1. 概述锁是Java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程获取同一个锁的线程发送消息。锁在实际使用时只
- SpringMVC常用组件DispatcherServlet:前端控制器,不需要工程师开发,由框架提供作用:统一处理请求和响应,整个流程控制
- Android中子线程和UI线程之间通信的详细解释 1.在多线程编程这块,我们经常要使用Handler,Thread和Runnable这三个
- 状态转移方程:d(i,j) = min(d(i,j),d(i,k)+d(k,j)),其中i<k<j思路对于每一个k(i<k
- java连续执行多条cmd命令命令之间用&连接例如:Process p = Runtime.getRuntime().exec(&q
- 二维(多维)vector添加一个空项今天刷Leecode,需要创建一个二维vector,vector<vector < int
- 本文实例讲述了Android仿英语流利说取词放大控件的实现方法。分享给大家供大家参考,具体如下:1 取词放大控件英语流利说是一款非常帮的口语
- 前言:Guarded Suspension意为保护暂停,其核心思想是仅当服务进程准备好时,才提供服务。设想一种场景,服务器可能会在很短时间内
- 看到这个sweet-alert-dialog很亲切,因为前端开发本人用的提示就是这个js插件,java牛人很厉害,直接弄成一个java包插件
- 前言在这一期的文章中,我将继续介绍 Either,使用它构建树形结构,该结构允许我模拟 Scala 的模式匹配来构建遍历方法。在 Java
- 写在前面注:本文章使用的 SpringBoot 版本为 2.2.4.RELEASE,其 Spring 版本为 5.2.3.RELEASE前言
- 本文实例为大家分享了android九宫格可分页加载控件的具体实现代码,供大家参考,具体内容如下github地址基本思路是viewpager+