您的位置:首页 > 移动开发

不同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);

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: