在某些场景下,我们可能需要在一个app中打开另外一个app,或者打开例外一个app中的子activity。那么如何实现呢,其实也是比较简单。
我们只要知道需要带开的app的包名和类名就可以了。
有两个app,包名分别是com.example.testappone和com.example.testapptwo
private void openMainActivity(){
ComponentName comName = new ComponentName("com.example.testapptwo", "com.example.testapptwo.MainActivity");
Intent intent = new Intent();
intent.setComponent(comName);
startActivity(intent);
}
其中com.example.testapptwo是我需要打开的app的包名,com.example.testapptwo.MainActivity是其主Activity的类名。
但是当我们打开的不是应用的主Activity时,还需要注意在Manifest.xml中注册activity时,需要设置android:exported="true",表示该activity能够被其他的application调用。
private void openSubActivity(){
ComponentName comName = new ComponentName("com.example.testapptwo", "com.example.testapptwo.SubActivityOne");
Intent intent = new Intent();
intent.setComponent(comName);
startActivity(intent);
}
<activity
android:name="com.example.testapptwo.SubActivityOne"
android:exported="true">
</activity>
我们只要知道需要带开的app的包名和类名就可以了。
有两个app,包名分别是com.example.testappone和com.example.testapptwo
private void openMainActivity(){
ComponentName comName = new ComponentName("com.example.testapptwo", "com.example.testapptwo.MainActivity");
Intent intent = new Intent();
intent.setComponent(comName);
startActivity(intent);
}
其中com.example.testapptwo是我需要打开的app的包名,com.example.testapptwo.MainActivity是其主Activity的类名。
但是当我们打开的不是应用的主Activity时,还需要注意在Manifest.xml中注册activity时,需要设置android:exported="true",表示该activity能够被其他的application调用。
private void openSubActivity(){
ComponentName comName = new ComponentName("com.example.testapptwo", "com.example.testapptwo.SubActivityOne");
Intent intent = new Intent();
intent.setComponent(comName);
startActivity(intent);
}
<activity
android:name="com.example.testapptwo.SubActivityOne"
android:exported="true">
</activity>
其中com.example.testapptwo"是我要打开的app的包名,com.example.testapptwo.SubActivityOne是其子acvtivity名,所以需要在第二个app注册SubActivityOne时,添加android:exported="true"这个属性。
那么为什么我们在打开另一个app的MainActivity时,不需要指定android:exported="true",其实是因为在Manifest.xml中注册MainActivity时,我们添加了IntentFilter,并且需要设置其action属性,所以exported就默认设置为true,所有不需要我们手动去设置。如下:
<activity
android:name="com.example.testapptwo.SubActivityOne"
>
<intent-filter >
<action android:name="android.testapptwo"/>
</intent-filter>
</activity>