下文皆使用Client表示操作的App,Server表示需要被唤起的远端App,Server的包名为“com.jxx.server” 1. ComponentName 使用ComponentName唤起Server步骤很简单,需要注意的是Server的Activity需要在manifest配置种设置exported为true Server的配置如下: <activity android:name=com.jxx.server.ServerActivity android:exported=true/> Client调用如下: Intent intent1 = new Int 【App相互唤醒技术详解】 在Android开发中,App之间的交互是常见的需求,有时我们需要一个App(Client)唤醒另一个App(Server)。本文将详细介绍两种主要的唤醒方式:通过ComponentName显式启动和使用隐式Intent。 1. **ComponentName显式启动** 显式启动是通过指定Server的完整组件名称(包括包名和Activity名)来唤醒目标App。在Server的`AndroidManifest.xml`中,被唤醒的Activity需要设置`android:exported="true"`,表明该Activity可以被其他应用访问。 Server的配置示例: ```xml <activity android:name="com.jxx.server.ServerActivity" android:exported="true"/> ``` Client启动Server的代码: ```java Intent intent1 = new Intent(); ComponentName componentName = new ComponentName("com.jxx.server", "com.jxx.server.ServerActivity"); intent1.setComponent(componentName); intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent1); ``` 除了直接设置ComponentName,还可以使用`setClassName()`方法: ```java Intent intent2 = new Intent(); intent2.setClassName("com.jxx.server", "com.jxx.server.ServerActivity"); intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent2); ``` 使用Intent,还可以传递数据,如使用Bundle: ```java Bundle bundle1 = new Bundle(); bundle1.putString("remote_invoke", "from_client"); intent1.putExtras(bundle1); startActivity(intent1); ``` 在Server端,可以通过`getIntent().getExtras()`获取传递的数据。 2. **隐式Intent唤醒** 隐式Intent是基于Intent的Action、Data和Category来唤醒App,这种方式不需要知道确切的Activity名称。Server端需要在`AndroidManifest.xml`中定义一个Intent-Filter,包括自定义Action、Data和Category: ```xml <activity android:name=".SecondActivity"> <intent-filter> <action android:name="com.jxx.server.ServerActivity" /> <data android:host="com.jxx.server" android:scheme="ServerActivity" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> ``` Client调用Server的代码: ```java Intent intent2 = new Intent("com.jxx.server.ServerActivity"); Uri uri = Uri.parse("ServerActivity://com.jxx.server?remote_invoke=from_client"); intent2.setData(uri); intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent2); ``` 这里,我们创建了一个自定义的URI,并将其作为Intent的数据部分。Server端通过`getData()`方法获取URI,从而解析传递的数据。 总结起来,App之间的唤醒主要有显式启动和隐式启动两种方式。显式启动更直接,适用于知道具体Activity的情况;而隐式启动则更灵活,适用于需要基于特定Action、Data或Category进行交互的场景。开发者可以根据实际需求选择合适的方法来实现App间的通信。在处理这类交互时,还需注意权限管理和安全问题,防止恶意App滥用唤醒功能。
- 粉丝: 7
- 资源: 916
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- CardExpiredException解决方案(亲测可用).md
- python《Hybrid-SORT-多目标跟踪器(弱线索对在线多目标跟踪)》+项目源码+文档说明
- aspose:word,pdf,ppt
- 个人信用报告690428.zip
- 植物大战僵尸射击版v.0.3 双端安装程序
- 【重磅,更新!】中国各省水资源分类统计数据(2003-2022年)
- 富士施乐打印机驱动下载 适用机型:FujiXerox DocuPrint M375 df、M378 d、M378 df
- python-图片批量保存脚本
- aspose:word,pdf,ppt
- 中国2005-2021年大气污染物和二氧化碳排放趋势数据集【重磅,更新!】