-
2019-01-23 23:55:45
总共有3种情况
一,从App A跳转到App B
示例1:
从一个 APP A 跳转到另一个 APP B的某个activity 例如DemoActivity
App A开启跳转的代码如下( 前提:知道要跳转应用的包名、完整的类名)Intent intent = new Intent(); //前提:知道要跳转应用的包名、类名 ComponentName componentName = new ComponentName("com.shangmi.demo", "com.shangmi.demo.DemoActivity"); Bundle bundle=new Bundle(); bundle.putInt("key",i++); intent.putExtras(bundle); intent.setComponent(componentName); startActivity(intent);
APP B的DemoActivity配置如下:
android:exported="true"
在 AnroidManifest 文件中给 DemoActivity节点设置 android:exported=“true”,该属性表示当前 activity 能否被另外一个Application 的组件启动,true允许启动,false不允许。默认是false
APP B的DemoActivity获取数据方式如下:
直接在onCreate()方法里面获取(DemoActivity为标准启动模式)Intent intent=getIntent(); if (intent!=null) { Bundle bundle=intent.getExtras(); if (bundle!=null) { int value=bundle.getInt("key"); et.setText(value+""); } }
这里注意下 如果DemoActivity是singleTask/singleInstance启动模式,在DemoActivity没有关闭
的情况,第2次重复开启DemoActivity,就应该在如下方法里面获取数据:@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (intent!=null) { Bundle bundle=intent.getExtras(); if (bundle!=null) { int value=bundle.getInt("key"); et.setText(value+""); } } }
二,从App A或者外部链接 跳转到App B的DemoActivity
App B的DemoActivity在清单文件AndroidManifest中配置如下:<activity android:name=".DemoActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> //系统默认添加的,一定要如下配置 <category android:name="android.intent.category.DEFAULT" /> //想被浏览器web链接激活,一定要如下配置 <category android:name="android.intent.category.BROWSABLE" /> <data android:host="main" android:scheme="app" /> </intent-filter> </activity>
App A激活的话:代码如下:
Intent intent = new Intent(Intent.ACTION_VIEW); intent.addCategory(Intent.CATEGORY_BROWSABLE); intent.setData(Uri.parse("app://main")); //这里Intent当然也可传递参数,但是一般情况下都会放到上面的URL中进行传递 intent.putExtra("", ""); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);
如果是web链接激活的话:代码如下(通过web.html中的A标签来操作)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>html页面</title> </head> <body> <h1>测试通过约定scheme,在浏览器中激活app B</h1> <a href="app://main/abc">点我激活DemoActivity</a> </body> </html>
App B的DemoActivity获取数据的方式如下:
Intent intent= getIntent(); //获取完整的数据 String dataString = intent.getDataString(); Uri uri = intent.getData(); if (uri != null) { //完整的url信息 String url = uri.toString(); //scheme部分数据 String schemes = uri.getScheme(); //host部分数据 String host = uri.getHost(); }
三,通过已知的包名 跳转到App B的DemoActivity(其实通过包名打开的是App B的launcher界面,launcher界面接受到数据后跳转到DemoActivity)
激活的代码如下:Intent intent=getPackageManager().getLaunchIntentForPackage("com.shangmi.demo"); if (intent!=null) { i++; Bundle bundle=new Bundle(); bundle.putInt("key",i); intent.putExtras(bundle); // intent.putExtra("bundleKey",bundle); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); }
App B的DemoActivity中获取数据的方式和第一种情况 是一样
结尾:如果有帮助到你,就请你点赞关注一下啦
更多相关内容 -
Android 在一个APP里打开另一个APP
2020-06-06 10:54:05不知道你们有没有注意过,每次打开一些软件的时候都会有广告引导页,有时候手滑点到了,会有进入手机上的另一个APP,这有没有引起你的注意呢? 正文 为了测试这个功能,首先要创建两个项目,然后运行起来都安装在你...前言
不知道你们有没有注意过,每次打开一些软件的时候都会有广告引导页,有时候手滑点到了,会有进入手机上的另一个APP,这有没有引起你的注意呢?
运行效果图
正文
为了测试这个功能,首先要创建两个项目,然后运行起来都安装在你的手机上,这里为了方便了解,取名就是应用A和应用B,流程就是A应用里面打开B应用。
首先当然是创建项目了
DemoA
DemoB
创建好之后,别的先不管,都在手机上安装一下再说
① 打开另一个APP
接下来在DemoA的MainActivity里面写一个按钮,用于点击之后打开DemoB应用
<Button android:id="@+id/btn_open_b" android:text="打开DemoB" android:textAllCaps="false" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
也在DemoB的布局文件改一下显示内容<TextView android:textSize="18sp" android:textColor="#000" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="DemoB" />
运行一下
这样就打开了。那假如我要传递数据到DemoB呢?
② 数据传递
传数据其实就跟平时单个APP内部不同页面传数据类似,也是用Intent
然后在另一个APP里面接收并显示出来。现在先修改一下DemoB的布局,增加一个TextView用来显示接收的内容。<TextView android:id="@+id/tv_info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="12dp" android:textColor="#000" android:textSize="16sp" />
DemoB的MainActivity里
一旦两个应用程序里面改动了代码你就要在手机上运行一下,否则你改动的代码就不会生效然后运行一下:
传值的问题就解决了。
③ 打开指定页面
通过包名跳转APP是进入默认的启动页面,你可以打开你的AndroidManifest.xml文件查看
那个Activity下面有这个默认启动就是那个<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
至于要打开指定的页面有两个方法
1.通过包名、类名
首先在DemoB的下面再创建一个TestActivity,简单加一个TextView
因为是要DemoB的TestActivity页面,所以这个activity在AndroidManifest.xml中需要配置android:exported 属性,布尔类型,是否支持其他应用访问目标 Activity,默认值为 true;
android:exported="true"
否则你跳转会报错的,现在运行DemoB,使改动的代码生效
然后修改DemoA里面MainActivity的代码
运行效果
这样就可以了。2.通过Action
修改DemoB的AndroidManifest.xml
然后运行在手机上,再修改DemoA的MainActivity
运行效果
其实还有一种方式是通过URL打开另一个APP,但是我不推荐这样做,为什么?没有原因… -
Android 一个app启动另一个app
2014-09-12 16:08:11一个app启动另一个app,这个玩法挺火的嘛,有没有试过更新QQ到5.1版本,QQ的健康里面就可以添加其他app,实现从QQ跳转到其他app应用,这里模拟写了一个demo -
uniapp 实现App打开另一个App,以微信为例
2021-01-19 13:43:06本文主要介绍,uniapp开发,在app中打开新的App,以微信为例。 handleGoApp() { if (plus.os.name == 'Android') { //安卓 if ( plus.runtime.isApplicationExist({ //查看安卓系统手机有没有下载这款...本文主要介绍,uniapp开发,在app中打开新的App,以微信为例。
handleGoApp() { if (plus.os.name == 'Android') { //安卓 if ( plus.runtime.isApplicationExist({ //查看安卓系统手机有没有下载这款app pname: 'com.tencent.mm' //微信app云打包的包名 }) ) { //安装了app plus.runtime.openURL( 'weixin://', function(res) { console.log(res); } ); } else { //未安装app uni.showModal({ title: '提示', content: '您还没有此APP,去下载', success: function(res) { if (res.confirm) { plus.runtime.openURL('https://a.app.qq.com/o/simple.jsp?pkgname=com.tencent.mm', function(res) { console.log(res); }); } else if (res.cancel) { console.log('用户点击取消'); } } }); } } else if (plus.os.name == 'iOS') { //苹果 //因为ios查不到B款app在ios系统手机里面,其实下载了,也是检测不到,所以就不检测了 //直接打开微信app,微信pp没有的话,会进入回调报错,我们在回调去打开下载链接 plus.runtime.launchApplication( { action: 'weixin://' }, function(e) { uni.showModal({ title: '提示', content: '您还没有此APP,去下载', success: function(res) { if (res.confirm) { plus.runtime.openURL('https://a.app.qq.com/o/simple.jsp?pkgname=com.tencent.mm', function(res) { console.log(res); }); } else if (res.cancel) { console.log('用户点击取消'); } } }); } ); } },
-
Android - scheme 一个app跳转另一个app、模块开发
2018-09-11 15:52:001、一个app跳转另一个app,并且传递参数,用到scheme跳转。 2、一个app体量太大,想把一部分功能单独作为模块开发,可以在主app里面使用scheme跳转到模块app里面(模块app里面不设置启动页,则不会显示)。 简单...说明:
scheme 两个主要功能
1、一个app跳转另一个app,并且传递参数,用到scheme跳转。
2、一个app体量太大,想把一部分功能单独作为模块开发,可以在主app里面使用scheme跳转到模块app里面(模块app里面不设置启动页,则不会显示)。
简单实现:
1、App1 使用scheme调用App2
点击按钮调用这个函数即可
Uri uri = Uri.parse("bocmcht://payresult/mobile?jsonData=123"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent);
2、App2接收App1的参数
1)现在AndroidManifest.xml中配置类的接收参数
<!--BOC中国银行--> <activity android:name=".BOCPayResultHandler" android:launchMode="singleTask" android:taskAffinity="com.baofu.sdkweb"> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <data android:scheme="bocmcht" android:host="payresult" android:path="/mobile"/> </intent-filter> </activity>
2)类里面获取值
public class BOCPayResultHandler extends Activity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); //bocmcht://payresult/mobile?jsonData=123 Uri uri = getIntent().getData(); String scheme = uri.getScheme();// 打印:bocmcht String host = uri.getHost();//打印:payresult String path = uri.getPath();//打印:/mobile String queryString = uri.getQuery();//打印:jsonData=123 Log.e("中国银行", scheme + "..." + host + "..." + "..." +path + "..." + queryString); } }
3、判断scheme是否有效
/** * 判断中国银行是否安装 - 2 * * @return */ public static boolean checkUrlScheme(Activity activity) { Uri uri = Uri.parse("bocpay://www.boc.cn/mobile?param=**");//scheme Intent intent = new Intent(Intent.ACTION_VIEW, uri); PackageManager packageManager = activity.getPackageManager(); List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0); return !activities.isEmpty(); }
详细介绍:
1、参数:调用时候的url
"bocmcht://payresult/mobile?jsonData=123"
对应:
<scheme>://<host>:<port>/<path>?query
解释:scheme是bocmcht,host是payresult,path是mobile,query是:jsonData=123"
下面是一个完整的demo(多了一个port)
content://com.example.project:200/folder?jsonData=123
解释:scheme是content,host是com.example.project,port是200,path是folder,query是:jsonData=123
2、接收:AndroidManifest.xml中配置
配置中只需要配置:scheme、host、port、path 即可,可单个配置,也可多个配置
- 如果intent-filter中只指定了scheme,那么所有带有该sheme的URI都能匹配到该intent-filter。
- 如果intent-filter中只指定了scheme和authority(authority包括host和port两部分)而没有指定path,那么所有具有相同scheme和authority的URI都能匹配到该intent-filter,而不用考虑path为何值。
- 如果intent-filter中同时指定了scheme、authority和path,那么只有具有相同scheme、authority和path的URI才能匹配到该intent-filter。
需要注意的是,intent-filter的<data>标签在指定path的值时,可以在里面使用通配符*,起到部分匹配的效果。
3、h5网页中通过scheme打开app
移动浏览器H5页面通过scheme打开本地应用:https://blog.csdn.net/u012246458/article/details/83787854
参考文章:
-
Android 在一个APP内打开另一个APP
2019-03-30 18:13:52Android 在一个APP内打开另一个APP 首先,第一步,我们要下载那个要打开的app,要安装。 然后我们需要根据它的包名才能进行跳转。 怎么知道它的包名呢? 我的第一个想法,先下载APK.然后解压。 看到熟悉的... -
uni-app中打开另一个app如何实现?
2020-06-15 11:46:33公司有一个需求,是在我们的app1中有个按钮,点击会打开我们的app2。 在uniapp的文档中我找到了怎么去实现。 首先贴出我参考的3个文档 ①uni-app 中如何打开外部应用,如:浏览器、淘宝、AppStore、QQ等 ... -
Android APP打开另一个APP完整逻辑实现
2018-05-09 18:12:03一丶概述前段时间配合开发,完成了一个APP拉起另一个APP的需求,负责接收数据跨登录部分。当然整个实现思路挺感兴趣就了解一下。先说说需求拉起另一个APP是为了方便统一使用管理,有些公司APP较多,部分人只需要用到... -
自定义协议从一个App打开另一个App的代码
2013-09-05 14:38:14假如你开发了2个App,怎么从其中一个App打开另一个呢?首先在自己要被打开的app的info.plist中自定义url types.如图所示 然后在另一个app中的响应事件中如此编写代码: NSURL *url = -
从一个APP启动另一个APP的activity的方式
2017-12-31 12:37:26从一个APP启动另一个APP的Activity的方法1、通过自定义action启动这种方式只需要在代码中设置一个action即可, 系统会自动过滤去找到这个action所对应的Activity 当前APP的代码Intent intent = new Intent(); //这里... -
iOS 一个APP打开另一个APP
2016-05-03 23:19:43iOS 一个APP打开另一个APP -
Android在APP中跳转到另一个APP后,从另一个APP返回
2017-07-25 08:58:11场景:两个APP,一个是自己做的APP1,一个是安卓市场下载的APP2;两个WIFI,信息均已知。 目的:APP1打开时,连接到了WIFI1,APP1中有接口可以切换到APP2,但APP2需要连接WIFI...问题是:我如何判断从另一个APP返回了? -
APP内打开另一个APP(URL Scheme与openURL)【iOS开发】
2017-06-30 15:21:29目标 平常我们做iOS开发,会经常遇到打开其他的APP的功能。本篇文章讲的就是打开别人的APP的一些知识。...建立这个工作空间主要是为了让我们后面建立的两个工程能在一个Xcode页面上管理,方便讲解 -
Android 防止App退出 或者 启动另一个App
2018-06-22 10:42:20程序在运行过程中,可能会由于某种原因而被干掉或者自己崩溃掉,为了增加可靠性,一般的做法就是在系统启动之后,自动起一个看门狗程序,来时刻看守应用程序。 由于本人对android也不是很精通 所以想到了以下办法,... -
Android之APP唤起另一个APP
2019-03-14 17:18:18在此记录一个APP拉起另一个APP的需求,虽然领导说:不要唤起,直接合并!(额。。。,好吧) 至于合并,咱们回来再谈吧。 A拉起B可实现方法: 1.使用包名,特定Activity名拉起: A中:跳转处 Intent intent = ... -
Android从一个APP跳转到另一个APP的主界面或某页面,并传递数据
2017-06-19 21:45:131. Android 从一个 APP 跳转到另一个 APP 主界面 Intent intent = new Intent(Intent.ACTION_MAIN); //前提:知道要跳转应用的包名、类名 ComponentName componentName = new ComponentName("... -
iOS实现两个APP之间共享文件(从一个App拷贝文件至另一个App)
2018-08-03 18:21:48直接上解决方案: 在项目Info.plist文件中添加如图所示字段...文件拷贝到咱们App了,咱们需要处理一下(要么存本地,要么直接预览)我的处理是存本地.上代码: - (BOOL)application:(UIApplication *)app openURL:(N... -
打开另一个APP(URL Scheme与openURL)
2018-01-30 21:19:46目标 平常我们做iOS开发,会经常遇到打开其他的APP的功能。本篇文章讲的就是打开别人的APP的一些知识。...建立这个工作空间主要是为了让我们后面建立的两个工程能在一个Xcode页面上管理,方便讲解和管理。挺简单 -
如何把一个app导入另一个app?教你快速解决!
2018-11-29 11:05:49最近公司需要将原来的app和现在的app合并(主要是为了用原来的功能),先说一下思路,分成一个主module和一个附module,其实就是一个app添加一个library,下面总结一下遇到的错。 将附module添加为library 1.首先... -
iOS App 唤醒另一个App
2016-08-21 17:55:23iOS App 唤醒另一个App 网上也有讲这块的,感觉讲得都不是很好。而且有一些细节根本没有讲清楚。这里重写整理一下相关知识点。 主要内容 URL Scheme 是什么?项目中关键的配置注意事项 URL Scheme 是什么? iOS... -
从一个APP跳转到另一个APP的指定页面
2017-06-06 15:28:42一个应用打开另一个应用 -
android中从一个app跳转到另一个app的方法
2017-02-20 15:53:16使用aapt //aapt是sdk自带的一个工具,在sdk\builds-tools\目录下 1.以微信为例,命令行中切换到aapt.exe目录执行:aapt dump badging E:\Android\weixin531android460.apk 2.运行后的结果如下(仅截取部分): ... -
Android APP启动其他APP(一个APP拉起(跳转到)另一个APP)
2019-03-27 17:53:42最近在开发一个APP交互时,遇到这样的需求,1、APP拉起第三方的APP,并且传值,2第三方APP拉起我们的APP,并可以根据传递过来的值启动相对应的页面。 我们通过Intent的隐式启动来拉起。 隐式启动拉起第三方APP有三... -
Android中一个app启动另一个app的指定activity
2017-07-06 10:53:08被启动指定的Activity 在AndroidMenifest.xml中要暴露入口,以便app 能够启动,不暴露入口,会报权限错误,不能正常启动 被启动的Activity暴露入口方式, android:exported="true" ,默认值是false ... -
通过一个链接打开本地app,或者去下载app
2017-01-04 13:44:14以前支付宝发短信给你手机 ,然后你点开这个链接的时候会发现它自动的打开了支付宝软件 ,这个是如何做到的呢 ? 其实这个主要的工作还是在链接js上的处理,app所要的操作就是很简单的,在android中的intent-... -
Android应用之间的跳转—从一个app跳转至另一个app
2016-05-27 14:23:53首先如果你需要隐藏你要从另一个应用启动的app的桌面图标,需要将一下代码注掉 要想在桌面不显示图标,只需注释掉APP入口Activity中的下面这句即可,或者把下面的LAUNCHER改成DEFAULT也行 --> 跳转的目标... -
安卓开发由一个APP拉起另一个APP的方法总结
2017-08-04 12:36:51安卓开发由一个APP拉起另一个APP的方法总结 本文为本人原创首发,转载请标明出处:http://blog.csdn.net/zang_chen/article/details/76677846,本文出自陈小二来巡山的博客 最近公司在对接第三方应用的时候有两个... -
从一个App跳转到另一APP
2016-06-18 10:41:43应用场景: 百度地图等 第三方支付 第三方分享登陆下面先说几个概念性东西: 1 URL :统一资源定位符(可以没有路径但是必须要有协议头)...并且在iOS中打开一个应用程序只要能拿到这个应用程序协议头即可iOS 从一个... -
Android在一个APP中通过包名或类名启动另一个APP
2014-07-24 19:05:48开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用。一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通过如下代码来启动: