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

转载 2012年03月30日 00:03:05

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的名字,只能你自己手动筛选了..

===

从一个APK调用另外一个APK中的一个ACTIVITY

原文:http://wenku.baidu.com/view/a555b4d676eeaeaad1f330a8.html 功能:Caller.apk 调用 Callee.apk中的CalleeMai...
  • lzkliao
  • lzkliao
  • 2012年04月06日 17:28
  • 1034

Android:一个apk中调用另一个apk的activity

有两个apk,其中一个是Firstapk,y ComponentName toActivity =  new ComponentName("com.hisense.ott.account", "...
  • chexinoo
  • chexinoo
  • 2014年05月30日 20:12
  • 995

从一个activity跳转到另一个程序的指定activity(含apk检测)

package com.anqiansong.themedemo; import java.io.File; import java.io.FileOutputStream; import java...
  • QQ243223991
  • QQ243223991
  • 2015年10月08日 11:20
  • 1904

android调用其他apk的activity

启动另一个apk的工程 public class MainActivity extends Activity{ @Override protected void onCreate(Bundle...
  • OnafioO
  • OnafioO
  • 2016年03月22日 11:50
  • 1080

一个apk调用另一个apk的native方法

环境需求:一个可以开发NDK的环境、反编译与回编的工具   1、  新建一个NDK工程(基本方法步骤网上说的基本都可以),在native方法中实现一个获取随机数的方法供测试,此工程生成的apk将在...
  • woshasanguo
  • woshasanguo
  • 2014年11月13日 15:40
  • 1517

一个apk调用另一个apk的某个activity

http://wenku.baidu.com/view/a555b4d676eeaeaad1f330a8.html
  • wocao1226
  • wocao1226
  • 2013年05月28日 13:41
  • 522

Android实战技巧之二十八:启动另一个App/apk中的Activity

Android提供了在一个App中启动另一个App中的Activity的能力,这使我们的程序很容易就可以调用其他程序的功能,从而就丰富了我们App的功能。比如在微信中发送一个位置信息,对方可以点击这个...
  • lincyang
  • lincyang
  • 2015年05月05日 15:56
  • 19908

程序中调用另一个apk的方法

1、 一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通过如下代码来启动:  view source print? Intent intent = ne...
  • lizhenmingdirk
  • lizhenmingdirk
  • 2014年02月19日 10:05
  • 2686

Android APK之间的调用

假设有2个APK,A和B,A需要调用B里面的一些函数。
  • arlaichin
  • arlaichin
  • 2014年04月02日 15:49
  • 1627

一个apk调用另一个apk

Intent mIntent = new Intent();ComponentName comp = new ComponentName("test.app", "test.app.TestAdapt...
  • kepoon
  • kepoon
  • 2011年04月29日 16:18
  • 1292
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个apk调用另一个apk的某个activity (根据帖子整理)
举报原因:
原因补充:

(最多只允许输入30个字)