一个apk调用另一个apk的某个activity (根据帖子整理)

http://www.eoeandroid.com/thread-68933-1-1.html

如果未知被调用的activity名,如何在一个apk中调用另一个apk

我现在在一个项目运行的时候,跳转到另一个项目,并且并不知道另一个项目的main activity名字。
Intent intent = new Intent();
ComponentName comp = new ComponentName("com.leqi.activity","com.leqi.activity.IndexActivity");//第一个参数是目标包名,第二个参数是目标包的activity名
intent.setComponent(comp);
intent.setAction("android.intent.category.MIAN");
startActivity(intent);


但是我现在并不知道第二个项目的main activity的名称,不知道该怎么调用。并且我想做到把第二个项目嵌入到第一个项目中,也就是说并不是同时安装两个应用,而是在一个应用内部调用一个子应用。小弟才疏学浅,还请各位帮助。感激不尽!!!!

===

一个应用就是调用另一个Activity,你需要学一下隐式和显示调用另一个Activity的方法,去google吧

===

用Intent的ACTION,隐式调用

===



http://wenku.baidu.com/view/a555b4d676eeaeaad1f330a8.html

功能:Caller.apk调用Callee.apk中的CalleeMainActivity和CalleeLowerActivity。

定义:
Caller.apk:去调用的apk, 包名为com.caller
Callee.apk:被调用的apk, 包名为com.callee
CalleeMainActivity:manifest.xml中的intent-filter字段带有<action android:name="android.intent.action.MAIN" />的activity
CalleeLowerActivity:manifest.xml中的intent-filter字段不带<action android:name="android.intent.action.MAIN" />的activity

做法:
1、需要在Caller.apk的manifest.xml中添加需要调用的activity的声明:

<activity android:name=activity的名称>
    <intent-filter>
        <action android:name="android.intent.action.VIEW"></action>
        <category android:name="android.intent.category.DEFAULT"></category>
    </intent-filter>
</activity>

<!-- "activity的名称"为:"com.callee.CalleeMainActivity"或"com.callee.CalleeLowerActivity"-->


2、Caller.apk中实现的调用代码:

try{                
    ComponentName toActivity = new ComponentName(需要启动apk的包名,需要启动的activity);

    Intent intent = new Intent();
    intent.setComponent(toActivity);
    intent.setAction("android.intent.action.VIEW");

    CurActivity.this.startActivity(intent);
}catch(Exception e){
    Log.v("go to apk error","------>"+e.toString());
}

<!-- "需要启动apk的包名"为:com.callee-->
<!-- "需要启动的activity"为:"com.callee.CalleeMainActivity"或者"com.callee.CalleeLowerActivity"-->

3、对于启动类似CalleeMainActivity的activity,以上步骤就够了,但是对于类似CalleeLowerActivity的activity,还需要在Callee.apk的manifest.xml中添加一些代码,有两种处理方式:

A.最简单,只要在Callee.apk的manifest.xml中的CalleeLowerActivity对应的activity字段中添加android:exported="true"即可。
B.将A的设置的exported设置为false,然后两个apk协商一个ShareUserId放在各自的manifest.xml中,这种做法可以实现只有知道ShareUserId的apk才能调用。



http://www.eoeandroid.com/thread-33862-1-1.html

调用已安装的APK程序

我想调用已经安装的APK程序,用以下代码可以调用系统的相机程序
                        Intent mIntent = new Intent();
                        ComponentName comp = new ComponentName("com.android.camera","com.android.camera.Camera");
                        mIntent.setComponent(comp);
                        mIntent.setAction("android.intent.action.VIEW");
                        startActivity(mIntent);
调用已安装好的程序需要知道包名和对应程序启动的类名,通过PackageInfo或ApplicationInfo可以获取程序名,包名但获取不到类名。有做过这方面的高手给点知道意见啊!谢谢先。。。


===

通过ResolveInfo取得类名

===

如果只是单纯的想打开,还用不了这么复杂。直接:
PackageManager .getLaunchIntentForPackage(  PackageName  ) ;就可以获得到改程序包默认的launch_intent

另外,说Component是类名就不专业了,它是组建嘛~这个也是可以获取到的,PackageInfo里有activities域包含所有包里的activity信息,activities.name就是相应组建的名字。

===

谢谢各位大哥的帮助,用版主大人的getLaunchIntentForPackage方法已经搞定。。。

===

getLaunchIntentForPackage是获取apk包里面优先级最高的那个activity来启动,具体的你可以去看看那api相关的源码,,,好像记得有个方法可以获取manifest里所有activity的名字,只能你自己手动筛选了..

===

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值