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

===

相关文章推荐

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

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

启动另一个App/apk中的Activity(A应用打开B应用)

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

Android实战技术:启动另一个App/apk中的Activity

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

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

package com.anqiansong.themedemo; import java.io.File; import java.io.FileOutputStream; import java...

android 获取另一个apk的信息

/**   * @return all local plaugins   */  private List findLocalPlugins(){   PackageManager pm=g...

获取另一个apk中的资源文件

如何获取另一个apk的资源?在聊这个问题前,先来看看我们在程序中调用getResources()方法,为何获取的是自己apk中的资源文件。追踪程序中getResources()方法,首先我们找到Con...
  • zxc123e
  • zxc123e
  • 2016年12月23日 17:26
  • 1036

安卓程序如何获取另一个apk的签名

补充点小知识:1,字节数组和字符串之间的转换1、字节数组转换为字符串 byte[] byBuffer = new byte[20];String strRead = new String(byBuff...

android调用另一个activity

  • 2014年10月02日 22:31
  • 55KB
  • 下载

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

环境需求:一个可以开发NDK的环境、反编译与回编的工具   1、  新建一个NDK工程(基本方法步骤网上说的基本都可以),在native方法中实现一个获取随机数的方法供测试,此工程生成的apk将在...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个apk调用另一个apk的某个activity (根据帖子整理)
举报原因:
原因补充:

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