首页 技术 正文
技术 2022年11月15日
0 收藏 576 点赞 4,382 浏览 2950 个字

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

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

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

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

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

所有的界面都是最简单的

这是第一个demoapk1

两个android程序间的相互调用(apk互调)

这是demoapk2的主要activity

两个android程序间的相互调用(apk互调)

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

两个android程序间的相互调用(apk互调)

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

两个android程序间的相互调用(apk互调)

第一种: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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,493
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,495
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,133
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,297