`
chroya
  • 浏览: 661550 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

在一个apk中调用另外一个apk中的activity

阅读更多

    其实,这本来是一件很简单的事情,但是我发现很多人问我这个问题,所以写篇小文章供参考。


    系统提供了很多可以直接调用的Activity,通过指定的Intent就可以调用,比如打开搜索的:

 

Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY,"searchString")
startActivity(intent);
 

     Intent.ACTION_WEB_SEARCH是一个字符串,是“搜索”这个Activity的标识,extra是传给这个activity的一些数据。发送出这个intent之后,系统根据action字符串Intent.ACTION_WEB_SEARCH知道了是要调用哪个activity,如果有重名,会弹出一个选择对话框。然后打开此activity,实现想要做的事情。


    那么,我们自己怎么来实现呢。
    首先,写一个activity,在AndroidManifest.xml里面的intent-filter中,给这个activity命名,

 

<intent-filter>
        <action android:name="chroya.foo"/>
        <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
 

    然后安装。安装完毕之后,你会发现,系统中找不到这个程序。别急,它确实安装在手机里面了,但是因为他不是main的,所以系统不会把他当做Application的入口程序。


    而要想打开这个activity,只有知道它名字的人才可以。跟系统的intent一样使用。它的名字定义为"chroya.foo",所以,这里用这个字符串就可以调用它了:

 

Intent intent = new Intent("chroya.foo");
startActivity(intent);
 

    我用刚才举的那个系统的intent说明,它的activity里面使用getIntent().getBundleExtra(SearchManager.QUERY)来接收传递进来的搜索字符串参数。而这个SearchManager.QUERY是关键字。如果要自己实现这种功能,只需要定义好关键字,然后从BundleExtra中取就行了。

分享到:
评论
10 楼 changkunyang 2011-06-16  
恩,这种方式实用场景有限,第一、C应用很难知道A已经安装。第二、从实用的角度上讲,如果C应用肯定而且是必须要用到A应用,那么用户在安装C的时候还需要安装A。
举一个例子说,如果C应用要使用到充值计费,但是又不想把计费代码和C写在一起,如果按你的方法,那还必须要安装充值计费的应用,如果不安装,相当于整个C应用就缺胳膊少腿了。还有一个场景,就是如果是同一个公司开发的应用,有很多代码都是重复的,这个时候肯定会考虑将这些重复的代码独立出来,封装成第三方应用,然后其他应用如果有需要的时候就引入,而不是每次拷贝一份。
9 楼 avi9111 2011-06-15  
好的,正需要,顶下你
8 楼 kkvsyy 2011-06-01  
有意思 有意思 
7 楼 王山而 2011-04-08  
LZ我想问一下我有一个“Library”的apk,还有一个“application”的apk
现在通过工程依赖编译通过(安装提示装完“application”的apk后又调用“Library”的apk安装),但运行时提示找不到类。
6 楼 gaogaf 2011-03-15  
apktool
5 楼 lovext 2010-11-25  
jayliud 写道
jinbinhan 写道
如果不知道另一个apk 的标识怎么调用呢?

可以反编译一下,然后就可以查看AndroidManifest.xml文件里面内容咯

apk不是基于标准的java vm,至今为止,用什么反编译?
4 楼 jayliud 2010-11-18  
jinbinhan 写道
如果不知道另一个apk 的标识怎么调用呢?

可以反编译一下,然后就可以查看AndroidManifest.xml文件里面内容咯
3 楼 jinbinhan 2010-10-08  
如果不知道另一个apk 的标识怎么调用呢?
2 楼 chroya 2010-09-21  
hshm 写道
LZ,A.apk中调用代码安装C.apk,安装完后,自动启动C.apk ,应如何实现

你是不知道如何安装C.apk,还是不知道什么时候安装完,还是不知道如何自动启动C.apk?
1 楼 hshm 2010-09-20  
LZ,A.apk中调用代码安装C.apk,安装完后,自动启动C.apk ,应如何实现

相关推荐

    fragment学两个demo就会用之一

    2. **在Fragment中调用接口方法**:在Fragment中,当需要与Activity通信时,调用这个接口的方法。 ```java public class MyFragment extends Fragment { private OnFragmentInteractionListener mListener; // ....

    PersistentSearch.zip

    然后,可以深入到"PersistentSearch-master"目录中,研究具体的代码实现,特别是与数据库交互的部分,如DAO(Data Access Object)层的代码,以及如何在Activity或Fragment中调用这些接口来实现搜索功能。...

    安卓SQLite数据库相关-Android学习之数据存储.rar

    源码通常会展示如何创建数据库对象,定义SQL语句,以及如何在Activity或Fragment中调用这些方法。通过阅读和分析源码,你可以学习到如何在生命周期方法中正确管理SQLite数据库的打开和关闭,以防止资源泄露。 “点...

    SDK_Voice.zip

    总结,集成科大讯飞语音SDK到Unity安卓端涉及的关键步骤包括:理解SDK功能、解压并导入资源、配置Unity与原生接口、在Android Studio中集成SDK、生成.aar库、在Unity中调用接口、编写C#脚本以及测试应用。...

    windows下 eclipse+ndk编译及使用jni示例

    1.) 在项目根目录下创建jni目录,下面是要放进去的第一个文件Android.mk LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := main_jni #LOCAL_CFLAGS := LOCAL_SRC_FILES := main.cpp #LOCAL_...

    Android Studio JNI 调用demo

    通过分析这个项目,可以更深入地理解JNI的使用方法,包括如何在Android Studio中设置,如何编写C/C++代码,以及如何在Java中调用这些本地方法。 总结,"Android Studio JNI 调用demo"是一个实践教程,旨在帮助...

    安卓GPS地图导航定位指南相关-Android外部调起高德地图显示坐标点.zip

    在提供的压缩包文件中,`JavaApk源码说明.txt`可能包含对源码的解释和使用说明,而`GaoDeTest`可能是实现上述功能的一个示例代码。`下载更多打包源码~.url`则可能是一个链接,用于获取更多的示例代码或扩展资料。 ...

    App分享到微信朋友圈实用.pdf

    其中,应用签名是一个重要的环节,微信提供的`Gen_Signature_Android.apk`工具可以帮助你生成应用签名。只需输入你的应用包名,即可得到应用签名。 XML配置文件中的示例代码如下: ```xml &lt;!-- 友推SDK注册信息 -...

    tom猫app android 开发.zip

    【标题】"Tom猫app android 开发.zip"是一个关于Android应用程序开发的教程资源包,主要针对使用Java语言的新手开发者。这个项目可能包含了一个模仿经典游戏"Tom猫"的应用程序开发过程,帮助初学者理解Android应用的...

    jni学习demo

    本教程将通过一个名为"CmakeJniDemo"的项目,详细讲解如何在Android Studio中使用CMake构建JNI模块,并演示Java调用C/C++代码以及C/C++调用Java的方法。 首先,我们需要创建一个新的Android Studio项目,并在项目的...

    android 动画 效果

    接下来,我们来看看如何在Activity中调用这些XML定义的动画。 **(1) 代码生成动画** ```java private class RotateButtonListener implements OnClickListener { @Override public void onClick(View view) { ...

    Android webview调用相机和相册

    在Android应用开发中,WebView是一个非常重要的组件,它允许开发者在原生应用内展示网页内容。然而,随着用户对交互性需求的提升,单纯展示网页已经不能满足需求,因此,集成像调用系统相机和相册这样的原生功能就...

    Android标题栏中添加返回按钮功能

    在Android应用开发中,标题栏(Toolbar或者ActionBar)是用户界面的重要组成部分,它通常包含应用的标识、操作菜单...记得在每个使用自定义标题栏的Activity中调用相应的设置方法,确保返回按钮的正确显示和功能实现。

    Android UI使用HTML布局方法实例

    在这个例子中,我们创建了一个名为`WebPlugin`的内部类,并使用`@JavascriptInterface`注解标记其公开给JavaScript的方法。这些方法可以在HTML中的JavaScript代码中被调用,实现Java与JavaScript之间的通信。例如,...

    SimpleFragment:简单片段代码

    在Android应用开发中,"Fragment"是Android SDK中的一个核心组件,主要用来处理用户界面的模块化。在大型复杂的应用中,使用Fragment可以使得UI设计更加灵活,方便维护和更新。"SimpleFragment"通常指的是一个基础的...

Global site tag (gtag.js) - Google Analytics