个人总结两个应用相互调用:
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);
- 由于动态广播需要调起的apk需要在 后台运行着,不做展示了
- 使用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>