zoukankan      html  css  js  c++  java
  • Android编程实现点击链接打开APP功能示例

    本文实例讲述了Android编程实现点击链接打开APP功能。分享给大家供大家参考,具体如下:

    在Android中点击链接打开APP是一个很常见的需求。例如,电商为用户发送优惠券之后经常会下发一条短信:某某优惠券已发送到您的账户中,点击 xxx 链接即可查看!此时当用户点击链接之后会直接打开本地APP,进入相关页面。

    功能实现:

    1.在manifest中为相应的activity添加intent-filter:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <activity
       android:name=".TestActivity">
       <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:host="mywebsite.com"
            android:pathPrefix="/openApp"
            android:scheme="http" />
       </intent-filter>
    </activity>

    2.在手机上模拟发一条短信,包含链接 http://mywebsite.com/openApp ,手机一般都能自动识别链接,点击链接后系统会弹出选择框,如下:

    点击自己的APP(AndroidTest)之后,系统就会自动打开AndroidTest这个程序的TestActivity这个页面。

    3.然而,上述做法显然是不完美的,因为用户很可能会选择浏览器打开此链接!为了解决这个问题,可以将scheme属性修改为自定义的,例如:

    1
    2
    3
    4
    <data
       android:host="mywebsite.com"
       android:pathPrefix="/openApp"
       android:scheme="myapp" />

    此时,对应的链接地址为 myapp://mywebsite.com/openApp . 因为手机本地只有我们自己的程序能够识别 myapp 这个协议,所以会直接打开APP。然而依旧存在问题:

    (1)如果把该链接放在网页上,希望希望用户点击链接后打开APP,那么上述做法是没有问题的。例如网页中添加如下代码即可:

    1
    <a href='myapp://mywebsite.com/openApp'>点击打开APP</a>

    (2)但是,如果把链接放在短信中就不行了。因为 myapp 这个协议系统的短信程序也不能识别,所以不会标记为链接样式,也就是说用户不能直接点击。

    解决该问题的方法是使用网页重定向功能,例如在短信中发送链接: http://abc.com/openApp ,然后在该网页上添加重定向:

    复制代码代码如下:
    <meta http-equiv="Refresh" content="0;url=myapp://mywebsite.com/openApp?name=zhangsan&age=20" />

    用户在短信中点击后会使用浏览器打开链接,然后自动打开自己的APP。

    4.最后,在TestActivity中可以获取链接url传递的参数:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Intent intent = getIntent();
    String action = intent.getAction();
    if (Intent.ACTION_VIEW.equals(action)) {
       Uri uri = intent.getData();
       if (uri != null) {
         String name = uri.getQueryParameter("name");
         String age = uri.getQueryParameter("age");
         Toast.makeText(this, "name=" + name + ",age=" + age, Toast.LENGTH_SHORT).show();
       }
    }

    PS:关于AndroidManifest.xml文件相关属性功能可参考本站在线工具:

    Android Manifest功能与权限描述大全:
    http://tools.jb51.net/table/AndroidManifest

  • 相关阅读:
    疫情环境下的网络学习笔记 python 5.8 数据库入门终章
    疫情环境下的网络学习笔记 python 5.7 navicat数据库,例题,sql注入
    疫情环境下的网络学习笔记 python 5.6 暂时看看
    疫情环境下的网络学习笔记 python 5.5 MYSql 表关系,外键
    疫情环境下的网络学习笔记 python 5.4 数据库基础
    疫情环境下的网络学习笔记 python 4.30 初识数据库
    疫情环境下的网络学习笔记 python 4.29 网络小项目
    XJOI 夏令营501-511测试11 游戏
    XJOI 夏令营501-511测试11 统计方案
    CF1197D Yet Another Subarray Problem
  • 原文地址:https://www.cnblogs.com/lenkevin/p/8508800.html
Copyright © 2011-2022 走看看