两个android程序间的相互调用(apk互调)
通常我们用到的只是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互调)的更多相关文章
- WebView中Js与Android本地函数的相互调用
介绍 随着Html5的普及,html在表现力上不一定比原生应用差,并且有很强的扩展兼容性,所以越来越多的应用是采用Html与Android原生混合开发模式实现. 既然要实现混合开发,那么Js与Andr ...
- Extjs Ext.ux.IFrame的用法 以及父子窗口间函数相互调用
Extjs Ext.ux.IFrame的用法 以及父子窗口间函数相互调用 Ext.ux.IFrame Extjs官方提供的一个组件,可以很方便的使用. 这样就完成了一个简单的IFrame的使用,通过E ...
- C 程序与 C++ 程序之间的相互调用
因为 C 编译器编译函数时不带参数的类型信息,只包含函数的符号名字.如 void foo( int x ) , C 编译器会将此函数编译成类似 _foo 的符号,C 链接器只要找到了调用函数的符号,就 ...
- KEIL C51 中嵌入汇编以及C51与A51间的相互调用
如何在 KEIL C51(v6.21) 中调用汇编函数的一个示例 有关c51调用汇编的方法已经有很多帖子讲到,但是一般只讲要点,很少有对整个过程作详细描述,对于初学者是不够的,这里笔者通过一个简单例子 ...
- Android 程序间的广播和Manifest找不到(解决方法)
昨天写的是广播接收端的一些操作, 今天学的是广播的发送,上节介绍的标准广播和有序广播指的是发送端发送后,接收端的广播形式. 既然要发送,那就可以自定义发送广播: 把EditText的内容拿出来广播. ...
- 两个java工程之间的相互调用方法
如果你有两个java项目的话,如何向他们之间进行信息的通信前提:必须知道要通信的java项目(接收请求方)的服务器的IP地址和访问路径.其实两个java项目之间的通信还是使用HTTP的请求.主要有两种 ...
- sap 程序之间的相互调用
1:首先进入到local object 目录下. 右键>create >function group,创建一个函数组. 右键创建类其它的东西 2:在创建的function group(fu ...
- windows下PHP批量生成打包android程序APK-渠道txt植入apk文件
服务器安装php环境 下载 android-sdk-windows 下载JDK 1.打开zip支持 c:/windows/php.ini ,打开 exec 2.apk 支持mime添加 .apk a ...
- Hybrid App开发模式中, IOS/Android 和 JavaScript相互调用方式
IOS:Objective-C 和 JavaScript 的相互调用 iOS7以前,iOS SDK 并没有原生提供 js 调用 native 代码的 API.但是 UIWebView 的一个 dele ...
随机推荐
- ural 1869
简单题 ~~ #include <cstdio> #include <cstring> #include <iostream> using namespace st ...
- Unity3d 接入 移动MM支付SDK(2.3) 全攻略
原地址:http://blog.csdn.net/dingxiaowei2013/article/details/26842177 先将例程运行起来 下载例程(csdn积分不够上传不了,只能用百度网盘 ...
- Javascript操作表格隔行变色
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- HEOI2016游记
DAY -1: 省选前集训因为某些事情感觉心情和状态异常的糟糕 坐在窗户上吹了半个小时的冷风之后觉得回家休息一段时间 (反正我家在保定,大不了我省选的时候直接去河北大学就好辣) 在家里颓了三天吧,想清 ...
- kmalloc/kfree,vmalloc/vfree函数用法和区别
http://blog.csdn.net/tigerjibo/article/details/6412881 kmalloc/kfree,vmalloc/vfree函数用法和区别 1.kmalloc ...
- [Python]读写文件方法
http://www.cnblogs.com/lovebread/archive/2009/12/24/1631108.html [Python]读写文件方法 http://www.cnblogs.c ...
- C内存分配函数
C语言跟内存分配方式(1) 从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量.(2) 在栈上创建.在执行函数时,函数内局部变量的 ...
- Xaml语法概述及属性介绍
Xaml语法概述 1.命名空间 xmal每个元素都对应着一个类,但是在xmal中,只提供类名是不够的,需要知道该类实在.net的哪个命名空间下面.Xaml解析器才能够正确的解析. 1 < ...
- Django admin的一些有用定制
Model实例,myapp/models.py: from django.db import models class Blog(models.Model): name = models.CharFi ...
- 图像二值化----otsu(最大类间方差法、大津算法)
最大类间方差法是由日本学者大津于1979年提出的,是一种自适应的阈值确定的方法,又叫大津 法,简称OTSU.它是按图像的灰度特性,将图像分成背景和目标2部分.背景和目标之间的类间方差越大,说明构成图像 ...