通常我们用到的只是activity之间的互相跳转和调用,很少会用到apk级别的互相调用。

往往在一些应用上会用到,比如一个支付系统,可能会有很多的一系列的程序调用到:彩票系统、订票系统、团购网……全部使用一个支付系统会显的更加专业,也能减少不必要的重复。

下面介绍两种方法从一个apk启动另一个apk。

两个互相调用的项目是:demoapk1和demoapk2

demoapk2是被调用的,我们调用它的Pay_Activity.java

所有的界面都是最简单的

这是第一个demoapk1

这是demoapk2的主要activity

这是apk2点击后跳转到结果(同一个apk中的跳转)

这是apk1跳转到apk2的得到的结果(注意上方apk的title)

第一种:ComponentName()

使用ComponentName()可以跳转到任何一个activity,不论是不是main activity。也不必写修改被调用的apk的AndroidManifest.xml任何内容,如下:

package com.hooy.apk1;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.view.MotionEvent; public class Demoapk1Activity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
} @Override
public boolean onTouchEvent(MotionEvent event) {
ComponentName componetName = new ComponentName(
//这个是另外一个应用程序的包名
"com.hooy.apk2",
//这个参数是要启动的Activity
"com.hooy.apk2.Pay_Activity");
// Intent intent= new Intent("chroya.foo");
Intent intent= new Intent();
//我们给他添加一个参数表示从apk1传过去的
Bundle bundle = new Bundle();
bundle.putString("arge1", "这是跳转过来的!来自apk1");
intent.putExtras(bundle);
intent.setComponent(componetName);
startActivity(intent);
return super.onTouchEvent(event);
}
}

ComponentName的参数已经写的比较详细了

package com.hooy.apk2;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView; public class Pay_Activity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//改变文字内容,标志这是从activity跳转过来的
TextView texView= (TextView) findViewById(R.id.text1);
texView.setText("我来自其他activity"); Intent intent= getIntent();
String value=intent.getStringExtra("arge1");
if(value!=null&&!value.equals("")){
texView.setText(value);//这里将显示“这是跳转过来的!来自apk1”
}else{
System.out.println("空的参数");
}
}
}

第一种方法也是比较简单。

第二种方法Intent+AndroidManifest.xml

顾名思义,此方法是用Intent和修改AndroidManifest.xml达成的。

intent就是我在上面第一个Demoapk1Activity中注释掉的内容

要修改的AndroidManifest.xml是demoapk2中的。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hooy.apk2"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk android:minSdkVersion="7" /> <application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".Demoapk2Activity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity> <activity android:name=".Pay_Activity">
<intent-filter>
<action android:name="chroya.foo"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity> </application>
</manifest>

和往常的xml一样,只有一点不同:<intent-filter> <action android:name="chroya.foo"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter>

就是给Pay_Activity取一个名字,供其他apk访问使用。实际效果和第一个方法一样。

from:http://www.cnblogs.com/winxiang/archive/2012/05/04/2482883.html

两个android程序间的相互调用(apk互调)的更多相关文章

  1. WebView中Js与Android本地函数的相互调用

    介绍 随着Html5的普及,html在表现力上不一定比原生应用差,并且有很强的扩展兼容性,所以越来越多的应用是采用Html与Android原生混合开发模式实现. 既然要实现混合开发,那么Js与Andr ...

  2. Extjs Ext.ux.IFrame的用法 以及父子窗口间函数相互调用

    Extjs Ext.ux.IFrame的用法 以及父子窗口间函数相互调用 Ext.ux.IFrame Extjs官方提供的一个组件,可以很方便的使用. 这样就完成了一个简单的IFrame的使用,通过E ...

  3. C 程序与 C++ 程序之间的相互调用

    因为 C 编译器编译函数时不带参数的类型信息,只包含函数的符号名字.如 void foo( int x ) , C 编译器会将此函数编译成类似 _foo 的符号,C 链接器只要找到了调用函数的符号,就 ...

  4. KEIL C51 中嵌入汇编以及C51与A51间的相互调用

    如何在 KEIL C51(v6.21) 中调用汇编函数的一个示例 有关c51调用汇编的方法已经有很多帖子讲到,但是一般只讲要点,很少有对整个过程作详细描述,对于初学者是不够的,这里笔者通过一个简单例子 ...

  5. Android 程序间的广播和Manifest找不到(解决方法)

    昨天写的是广播接收端的一些操作, 今天学的是广播的发送,上节介绍的标准广播和有序广播指的是发送端发送后,接收端的广播形式. 既然要发送,那就可以自定义发送广播: 把EditText的内容拿出来广播. ...

  6. 两个java工程之间的相互调用方法

    如果你有两个java项目的话,如何向他们之间进行信息的通信前提:必须知道要通信的java项目(接收请求方)的服务器的IP地址和访问路径.其实两个java项目之间的通信还是使用HTTP的请求.主要有两种 ...

  7. sap 程序之间的相互调用

    1:首先进入到local object 目录下. 右键>create >function group,创建一个函数组. 右键创建类其它的东西 2:在创建的function group(fu ...

  8. windows下PHP批量生成打包android程序APK-渠道txt植入apk文件

    服务器安装php环境 下载 android-sdk-windows  下载JDK 1.打开zip支持 c:/windows/php.ini ,打开 exec 2.apk 支持mime添加 .apk a ...

  9. Hybrid App开发模式中, IOS/Android 和 JavaScript相互调用方式

    IOS:Objective-C 和 JavaScript 的相互调用 iOS7以前,iOS SDK 并没有原生提供 js 调用 native 代码的 API.但是 UIWebView 的一个 dele ...

随机推荐

  1. 【锋利的JQuery-学习笔记】遮罩层

    效果图:  鼠标移动到上面后---> html: <div id="jnBrandList"> <ul> <li> <a href= ...

  2. 集合上的动态规划---最优配对问题(推荐:*****) // uva 10911

    /* 提醒推荐:五星 刘汝佳<算法竞赛入门经典>,集合上的动态规划---最优配对问题 题意:空间里有n个点P0,P1,...,Pn-1,你的任务是把它们配成n/2对(n是偶数),使得每个点 ...

  3. Unity3D脚本中文系列教程(十四)

    http://dong2008hong.blog.163.com/blog/static/469688272014032134394/ WWWFrom 类Unity3D脚本中文系列教程(十三)辅助类. ...

  4. 被遗忘的Android mipmaps简介

    被遗忘的 Android mipmaps 简介 [导读]已经发布的 Android Studio1.1 版本是一个 bug 修复版本.在这个版本中,当你创建工程时一项改变将会吸引你的眼球.工程创建登陆 ...

  5. Oracle/PLSQL: Creating Functions

    In Oracle, you can create your own functions. 译:在ORACLE中,你可以创建你自己的方法. The syntax for a function is: ...

  6. Javascript操作元素属性方法总结

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  7. **使用 Git Hook 实现网站的自动部署

    http://www.tuicool.com/articles/3QRB7jU 自动化能解放人类的双手,而且更重要的是,因为按照规定的流程来走,也减少了很多误操作的产生.不知道大家平时都是怎么样更新自 ...

  8. SDUT图结构练习——最小生成树

    http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2144&cid=1186 这道题一开始是用prim算法做的,一直错一直错,后来问了帅郭改用 ...

  9. Java传入参数个数不确定可用(Type ... values)

    /** * 可变长的参数. * 有时候,我们传入到方法的参数的个数是不固定的,为了解决这个问题,我们一般采用下面的方法: * 1. 重载,多重载几个方法,尽可能的满足参数的个数.显然这不是什么好办法. ...

  10. POJ1470 Closest Common Ancestors

    LCA问题,用了离线的tarjan算法.输入输出参考了博客http://www.cnblogs.com/rainydays/archive/2011/06/20/2085503.htmltarjan算 ...