关于启动外部Apk和多Activity同屏显示的方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
启动一个外部的activity(APK)的方法.
启动一个外部的acitivity的方法有很多,基本上归类为2种,隐性和显性,区别是一个是知道另外一个APK的包名和启动的activity,另外一个是只知道activity设定的name,
针对实例:ApkA启动ApkB的话.
针对隐性,只要
ApkB在manifest中设置:
<action android:name="com.aspire.demo_test1.DemoTestActivity1" />
ApkA启动
Intent apk1=new Intent();
apk1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
apk1.setAction("com.aspire.demo_test1.DemoTestActivity1");
this.startActivity(apk1);
即可.
针对显性,只要
ApkA启动:
Intent apk1=new Intent();
apk1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
apk1.setClassName("com.aspire.demo_test1", "com.aspire.demo_test1.DemoTestActivity1"); this.startActivity(apk1);
即可.
区别就是ApkB是否需要设置.和ApkA是否已知ApkB的启动包和类.
多个同一APK中的activity同屏显示:
首先你的activity不要extends Activity,而要写成extends ActivityGroup
然后程序中.
protected LocalActivityManager mLocalActivityManager = null;
mLocalActivityManager =getLocalActivityManager();
Intent apk1=new Intent();
apk1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
apk1.setClassName("com.aspire.demo_test1", "com.aspire.demo_test1.DemoTestActivity1"); Window w = mLocalActivityManager.startActivity("tab1", apk1);
View wd1=w.getDecorView();
这里返回的view就是另外一个activity的显示实例.可以获得多个activity的实例然后按照正常的UI组件设计设置layout.
多个非同一APK中的acitivity同屏显示.
基本使用方法和上面的同一APK中的使用方法一样,但是需要在这几个APK的manifest中进行设置android:sharedUserId="com.aspire",因为android的安全机制认为非指定共享的数据别人是无法访问的,因此要在自己的apk中使用别人的apk中的数据的话,要进行设置.
这里还需要特别注意的.如果是设置了同一sharedUserId,却数字签名不同的话,程序是不允许安装的,因此如果想在自己的程序中调用别的activity的组件作为自己的一个view的话,比需要实现2点:
1.设置android:sharedUserId.
2.使用相同的数字签名
注意:
1.如果在调用当中,某个组件直接执行startActivity(XXX);等操作的话,整个界面将会被新的Activity接管,而非画面的局部被接管.这点在开发上是要注意的,避免一些需要的内容被覆盖.
2.菜单方面问题,当ApkA和ApkB同时都是初始化启动并且都有菜单的情况,则2个菜单会累加后显示,但是如果是启动了ApkA之后(初始化之后),再启动的ApkB,则菜单只有ApkA的,因此如果需要菜单方面的定制,则注意开发时候,必须重新初始化菜单.
扩展性:
因为多个activity的同时显示成为可能,所以将android做成类似于windows这种一个桌面可以显示多个窗口(window)的样子.不过真机测试的情况下随着程序的增多速度有所减慢.
参考内容:
此次尝试的思路来自于TabActivity,Tabhost的实现和对其源码的跟踪. 感谢金田对manifest 的技术支持和华友ActivityGroup的分析.。