不同app之间activity的启动调用传值
2017-05-18 11:00
387 查看
假设有两个工程Aproduct和Bprodcut 一:现在打开A工程中的activity点击某按钮启动B工程中的actvity(先不传递值,只启动) B工程AndroidManifest.xml配置 <activityandroid:name=".MainActivity"> //第一个intent-filter默认程序启动入口
<intent-filter> <actionandroid:name="android.intent.action.MAIN"/> <categoryandroid:name="android.intent.category.LAUNCHER"/> </intent-filter>
//第二个intent-filter程序的第二个入口名字为net.action.b.main <intent-filter> <actionandroid:name="net.action.b.main"/> <categoryandroid:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>
A工程启动B工程的方法为:
Intentintent=newIntent("net.action.b.main");
//调用A中的MainstartActivity(intent);
A工程启动B工程的actvity,不论B工程当前是否在运行都会启动。
当然如果B工程这个页面根本不存在程序就会出ActivityNotFoundException异常然后崩掉,
所以开发中需要捕获这个Exception不要让程序挂掉,然后根据需求做一些处理:
try{
Intentintent=newIntent("net.action.a.main");//调用A中的MainstartActivity(intent);}catch(ActivityNotFoundExceptione){Toast.makeText(MainActivity.this,"我在这崩溃了,需要处理",Toast.LENGTH_SHORT).show();}
二:现在A工程启动B工程需要传值了
正常的Intent携带的参数正常使用就好,比如intent.putExtra("value","key")等等
但是如果在B工程的配置不是不是不是
//第二个intent-filter程序的第二个入口名字为net.action.b.main<intent-filter><actionandroid:name="net.action.b.main"/><categoryandroid:name="android.intent.category.DEFAULT"/></intent-filter>
而是而是而是加了一个scheme属性值,变成这样:
//第二个intent-filter程序的第二个入口名字为net.action.b.main<intent-filter><actionandroid:name="net.action.b.main"/>
<dataandroid:scheme="bbb"/><categoryandroid:name="android.intent.category.DEFAULT"/></intent-filter>
那么A工程启动B工程就需要这样启动了try{
Intentintent=newIntent("net.action.a.main",Uri.parse("bbb://666"));//调用A中的MainstartActivity(intent);}catch(ActivityNotFoundExceptione){Toast.makeText(MainActivity.this,"我在这崩溃了,需要处理",Toast.LENGTH_SHORT).show();}
必须加Uri.parse("xxx://?????")
那么在B中获取A在uri.parse传递过去的方式为:获取的是xxx://后边的内容也就是666
Stringhost=getIntent().getData().getHost();
三:当然以上是action的启动方式还有一种就是直接以包名类全名启动的方式
Intentintent=newIntent();
方式一:setClassName
intent.setClassName("启动目标包名,比如:com.xxx.a","启动目标类名,比如:com.xxx.a.XxxActivity")
方式二:setComponent
intent.setComponent(newComponentName("启动目标包名,比如:com.xxx.a",
"启动目标类名,比如:com.xxx.a.XxxActiviy"));
注:app之间启动切换actvity启动方式既可以是startActivity(intent)也可以是startActivityForResult(intent,66);
相关文章推荐
- Android 不同app之间调用activity,通过action实现
- Activity和Fragment之间相互传值和调用方法
- android不同应用程序之间启动Activity
- Fragment之间通过Activity相互传值和调用的2个方式
- 处于不同栈Activity之间的启动与数据传递
- Activity(不同APP)启动之源码分析
- Android Studio 不同Activity 之间传值并进行使用传回的值
- (My Android Life) 1. Activity之间传值,调用; apk 图标隐藏。
- Android 不同Activity之间的传值
- 【Android】如何启动调用其他app中的Activity
- Android不同App中Activity的相互启动
- 【Android】activity在不同apk之间的调用
- 不同启动模式下onActivityResult的调用时机问题
- Activity数据传输--Intent显示、隐式、不同应用之间启动
- iOS巅峰之两个App之间相互调用并携带参数传值
- 不同app之间activity的跳转
- Java中不同的包之间的调用。。
- 利用Intent在不同的activity之间传递数据
- Activity启动模式,实现Activity之间的跳转!
- AIDL中遇到的问题,记录一下 + 避免绑定启动service 后 activity 与service 之间参数为null的情况