android scheme跳转_运用scheme协议唤起外部app

640?wx_fmt=jpeg

黑客技术 点击右侧关注,了解黑客的世界! 640?wx_fmt=jpeg

640?wx_fmt=jpeg

Java开发进阶 点击右侧关注,掌握进阶之路! 640?wx_fmt=jpeg

640?wx_fmt=jpeg

Python开发 点击右侧关注,探讨技术话题! 640?wx_fmt=jpeg

作者丨HarryClaire

来源:

https://blog.csdn.net/wangzunkuan/article/details/95515175 最近所做的项目中有一个需要唤醒外部APP的功能,甲方要求在 接入是需要用scheme方式。为此,本人查了一些资料,在研究的基础上进行了开发。现总结如下:
什么是scheme的唤起方式
首先,需要指出的是在客户端开发中,scheme是一种页面内跳转协议,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面;通过scheme协议,服务器可以定制化告诉App跳转那个页面,可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转页面等。它是通过URL的形式进行跳转的,主要可以进行两个层次的跳转: 1)同一应用内,原生页面唤起原生界面 或者 h5页面唤起原生界面; 2)两个独立的APP,一个APP原生或者h5唤起另一个APP的原生界面 下面说一下scheme协议的主要结构(我这边写的是原生app1唤起app2)
$scheme$://$host$#Intent;scheme=$scheme$;package=$appId$;end 
scheme: 具体的协议,这里可以自定义,只要双方约定好就行
host:端口号,这里也是要双方约定好即可
appId: 需要被唤起的应用的ID(这里注重说一下,最好不要用包名而是用APPID 否则可能唤起不了)
实际应用
第一步:在被唤起的APP中新建一个activity,作为被唤起的对象,专门用来处理唤起后的操作。
public class WeekUpActivity extends Activity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);
        goTopPage();
    }/**
     * 跳转到最近的界面
     */private void goTopPage() {
        Class topClass = getTopActivityClass();if (topClass != null) {
            Intent intent = new Intent(WeekUpActivity.this, topClass);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            WeekUpActivity.this.startActivity(intent);
        } else {
            Intent intent = new Intent(WeekUpActivity.this, SplashActivity.class);
            WeekUpActivity.this.startActivity(intent);
        }
        finish();
    }/**
     * 获得栈中最顶层的Activity类
     *
     * @return
     */public Class getTopActivityClass() {
        Class classTop = null;try {
            Activity currentActivity = ActivitiesManager.getInstance().currentActivity();if (currentActivity.getClass().equals(WeekUpActivity.class)) {
                Stack activityStack = ActivitiesManager.getInstance().getActivityStack();
                Activity activity = activityStack.elementAt(activityStack.size() - 2);
                classTop = activity.getClass();
            } else {
                classTop = currentActivity.getClass();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }return classTop;
    }
}
第二步:配置目标activity的过滤器
我写的这个activity主要是用来被唤起,然后跳转到应用最顶部的界面中去。那么如何被唤起呢,主要是在于该activity的注册文件中新增了用于被激活的过滤器。
<activityandroid:name=".splash.WeekUpActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><dataandroid:host="home0712"android:scheme="host0712" />intent-filter>activity>
以上两步便是被唤起的app进行所有操作了,后面便是主动唤起方的业务了。比如,如果是原生代码想唤起改界面的话,可以用下面的方法即可:
Intent intent=new Intent(Intent.ACTION_VIEW, Uri.parse("host0712://host0712#Intent;scheme=host0712;package=被唤起的app包名;end"));
startActivity(intent);
版权声明:本文为CSDN博主「HarryClaire」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

 推荐↓↓↓ 

640?wx_fmt=jpeg

?16个技术公众号】都在这里!

涵盖:程序员大咖、源码共读、程序员共读、数据结构与算法、黑客技术和网络安全、大数据科技、编程前端、Java、Python、Web编程开发、Android、iOS开发、Linux、数据库研发、幽默程序员等。

640?wx_fmt=png万水千山总是情,点个 “ 在看” 行不行
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Scheme跳转协议是一种在Android操作系统中用于app之间通信的机制。通过Scheme跳转协议,一个app可以通过调用另一个app的特定功能或界面,实现跳转和传递参数的功能。 Android Scheme跳转协议的实现过程如下: 1. 在待跳转app中,需要先定义一个特定的Scheme,用于唯一标识该app。一般情况下,Schemeapp的包名或自定义的scheme名称组成。 2. 在相应的Activity或Fragment中,通过Intent设置该Activity或Fragment的Scheme,以及需要传递的参数,如数据、标志位等。 3. 在需要跳转到该appapp中,通过调用系统提供的隐式Intent的方式,并设置跳转Scheme以及传递的参数,发起跳转。 4. 如果目标app已安装在设备上,在符合条件的应用列表中,用户可以选择使用该app打开链接。 5. 目标app接收到跳转请求后,在其Manifest文件中通过声明Intent过滤器,匹配相应的Scheme和路径,并执行对应的操作或界面跳转。 需要注意的是,为了保证Scheme跳转的可用性,需要在app安装时注册相应的Scheme,以便系统能够正确地将请求导向目标appScheme跳转协议在实际应用中常被用于app之间的跳转和通信,例如在支付宝中使用支付宝Scheme跳转到其他第三方APP完成支付,或者在浏览器中使用特定的Scheme跳转到其他APP打开指定的页面等。 总之,Android Scheme跳转协议是一种方便实现app之间通信的机制,通过定义特定的Scheme和使用Intent实现跳转和传参,能够提供更丰富的用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值