android 两个应用相互调用

个人总结两个应用相互调用:

   1.静态广播
   2.动态广播
   3.startActiviy
   4.startActiviyForResult(使用packagename)
   5.startActivityForResult(使用Action)

1.静态广播调起apk
第一步,在将要调起的apk 中AndroidManifest.xml注册静态广播

 <receiver android:name=".MyStaticBroadcastReceiver"
           android:enabled="true"
           android:exported="true">
           <intent-filter>
                <action android:name="com.example.mydemo.mystaticbroadcastreceiver"/>
           </intent-filter>
        </receiver>

第二步,调用的apk中创建广播接受的类

public class MyStaticBroadcastReceiver  extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {

        Intent intent1 = new Intent(context, MainActivity.class);
        context.startActivity(intent1);
  }
}

3.第三步,所在的apk中发送静态广播

Intent intent = new Intent();
                intent.setAction("com.example.mydemo.mystaticbroadcastreceiver");
                intent.setComponent( new ComponentName( "com.example.mydemo" ,"com.example.mydemo.MyStaticBroadcastReceiver") );
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.addFlags(Intent. FLAG_INCLUDE_STOPPED_PACKAGES);
                sendBroadcast(intent);
  1. 由于动态广播需要调起的apk需要在 后台运行着,不做展示了
  2. 使用startActivity方法调起apk
    需要找到调起apk的包名,在使用startActivity即可
  Intent intent2 = new Intent();
                ComponentName componentName = new ComponentName("com.example.mydemo", "com.example.mydemo.MainActivity");
                intent2.setComponent(componentName);
                startActivity(intent2);

4.使用startActivityForResult 方法(利用包名),调起apk,回传数据
第一步,同startActivity一样

 Intent intent3 = new Intent();
                ComponentName componentName3 = new ComponentName("com.example.mydemo", "com.example.mydemo.MainActivity");
                intent3.setComponent(componentName3);
                intent3.putExtra("BS","3");
                startActivityForResult(intent3,0);
                

第二步,在调起的apk中接受并且回传数据

             Intent intent0 =getIntent();
             String  bs = intent0.getStringExtra("BS");
             Intent intent = new Intent();
                      intent.putExtra("xxx","123");
                      setResult(1,intent);
                      finish();

第三步,接受回传的数据

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
       if(requestCode==0||resultCode==1)
       {
           String xxx = data.getStringExtra("xxx");
           Toast.makeText(getApplication(),"回传的值P---"+xxx,Toast.LENGTH_SHORT).show();
       }

 }

5.使用startActivityForResult 方法(利用Action),调起apk,回传数据

和使用包名相同,在不知道包名类名的情况下使用ation,被调起的apk需要添加 aciton

Intent intent4 = new Intent();
                intent4.setAction("android.intent.action.demo");
                intent4.putExtra("BS","4");
                startActivityForResult(intent4,2);

在被调起的apk中的AndroidManifest.xml的Acitivity下面添加aciton,其他的和利用包名的都一样

 <intent-filter>
                <action android:name="android.intent.action.demo" />
                <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>

代码地址:https://github.com/yanghong666/MyProject

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值