不同app之间activity的启动调用传值

假设有两个工程Aproduct 和 Bprodcut   

一:现在打开A工程中的activity点击某按钮启动B工程中的actvity(先不传递值,只启动)

      B工程AndroidManifest.xml配置

      <activity android:name=".MainActivity">

    //第一个intent-filter默认程序启动入口 

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    //第二个intent-filter程序的第二个入口 名字为 net.action.b.main
    <intent-filter>
        <action android:name="net.action.b.main" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
   </activity>
  
   A工程启动B工程的方法为:
   Intent intent = new Intent("net.action.b.main");
   //调用A中的Main
   startActivity(intent);
 
   A工程启动B工程的actvity,不论B工程当前是否在运行都会启动。
   当然如果B工程这个页面根本不存在程序就会出ActivityNotFoundException异常然后崩掉,
   所以开发中需要捕获这个Exception不要让程序挂掉,然后根据需求做一些处理:
   try{
    Intent intent = new Intent("net.action.a.main");
       //调用A中的Main
       startActivity(intent);
    }catch (ActivityNotFoundException e){
       Toast.makeText(MainActivity.this,"我在这崩溃了,需要处理",Toast.LENGTH_SHORT).show();
    }

 二:现在A工程启动B工程需要传值了
         正常的Intent携带的参数正常使用就好,比如 intent.putExtra("value","key")等等
    但是如果在B工程的配置不是不是不是 

    //第二个intent-filter程序的第二个入口 名字为 net.action.b.main
    <intent-filter>
        <action android:name="net.action.b.main" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    
    而是而是而是加了一个scheme属性值,变成这样:
    //第二个intent-filter程序的第二个入口 名字为 net.action.b.main
    <intent-filter>
        <action android:name="net.action.b.main" />
       <data android:scheme="bbb" /> 
<category android:name="android.intent.category.DEFAULT" /> </intent-filter>
    那么A工程启动B工程就需要这样启动了
try{
    Intent intent = new Intent("net.action.a.main",Uri.parse("bbb://666"));
       //调用A中的Main
       startActivity(intent);
    }catch (ActivityNotFoundException e){
       Toast.makeText(MainActivity.this,"我在这崩溃了,需要处理",Toast.LENGTH_SHORT).show();
    }

    必须加Uri.parse("xxx://?????")
    
    那么在B中获取A在uri.parse传递过去的方式为:获取的是xxx://后边的内容 也就是666
    String host = getIntent().getData().getHost();
 三:当然以上是action的启动方式 还有一种就是直接以包名 类全名启动的方式
     
     Intent intent=new Intent();
     方式一:setClassName
     intent.setClassName("启动目标包名,比如:com.xxx.a","启动目标类名,比如:com.xxx.a.XxxActivity")
     方式二:setComponent
     intent.setComponent(new ComponentName("启动目标包名,比如:com.xxx.a",
                                                "启动目标类名,比如:com.xxx.a.XxxActiviy"));

 
 

  注:app之间启动切换actvity启动方式既可以是startActivity(intent)也可以是startActivityForResult(intent,66);

      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值