Posts List
  1. 使用ComponentName
  2. 以新的task启动程序

Android程序如何启动另一个程序

使用ComponentName

使用的代码如下

1
2
3
4
Intent intent = new Intent();
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
startActivity(intent);

例如我们要启动B程序的MainActivity

1
2
3
4
Intent intent = new Intent();
ComponentName cn = new ComponentName("com.example.b", "com.example.b.MainActivity");
intent.setComponent(cn);
startActivity(intent);

如果启动的Activity不是MainActivity,那么我们要保证此Activity是export的。
否则会报异常java.lang.SecurityException: Permission Denial: starting Intent

而要实现Activity为export有两个办法:

  1. 在AndroidManifest中声明此Activity为export

    1
    <activity android:name="com.example.b.TestActivity" android:exported="true"></activity>
  2. 在AndroidManifest中为此Activity添加intent-filter,类似默认的MainActivity一样

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <intent-filter>
    <action name="com.example.b.start"></action>
    </intent-filter>
    ```
    ## 使用Action
    第二种启动方式就是直接使用Action,这种方法就比较简单了。
    在B程序的Activity中加入action
    ```xml
    <intent-filter>
    <action name="com.example.b.start"></action>
    </intent-filter>

然后在A程序中

1
2
Intent intent = new Intent("com.example.b.start");
startActivity(intent);

以新的task启动程序

在启动外部程序的时候,同样也是可以设置启动的flag的
例如添加FLAG_ACTIVITY_NEW_TASK标识

1
2
3
Intent intent = new Intent("com.example.b.start");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

添加这个标识,区别在于被启动的程序(DemoB)与发起启动的程序(DemoA)是否在同一个task里。
表现出来的区别就是当启动外部程序后,按home键退出到桌面,重新打开DemoA程序,
如果带有FLAG_ACTIVITY_NEW_TASK标识,则进入的是DemoA之前的界面
而如果没有带FLAG_ACTIVITY_NEW_TASK标识,则会进入到DemoB的界面当中.

本文作者:JeremyHe
本文链接:https://alzz.me/posts/2014/07/24/02_Android程序如何启动另一个程序/
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

联系作者
微信。◕‿◕。