两个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

时间: 2024-10-09 22:59:52

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

Android组件间的相互调用

我们研究两个问题,1.Service如何通过Broadcaster更改activity的一个TextView.(研究这个问题,考虑到Service从服务器端获得消息之后,将msg返回给activity) 2.Activity如何通过Binder调用Service的一个方法.(研究这个问题,考虑到与服务器端交互的动作,打包至Service,Activity只呈现界面,调用Service的方法) 结构图见如下:效果图如下:点击“start service”按钮,启动Service,然后更改Activ

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

介绍 随着Html5的普及,html在表现力上不一定比原生应用差,并且有很强的扩展兼容性,所以越来越多的应用是采用Html与Android原生混合开发模式实现. 既然要实现混合开发,那么Js与Android原生函数的相互调用就必不可少了.这里写了一个demo,实现点击html中的图片进行本地展示. 原理 1.Android调用js很简单,直接webView.loadUrl("javascript:JS中的方法名称()");即可. 2.js调用Android方法,需要使用WebView.

Thinkphp中项目下的分组间的相互调用中的配置调用不能跨组

起因: 今天在Home组下面的一个控制器中调用RequestApi组里的控制器下的方法,结果发现一直为Null调用不到,但是当单独打印RequestApi里的方法,是没问题的,郁闷死了.开始检测费了九牛二虎之力就是不行,最后看到RequestApi中调用了配置项,莫非是这个导致的,于是单独打印配置项,可以啊,将配置项在RequestApi中单独写死,运行Home下的方法居然可以了,尼玛,坑爹,配置项的问题. 解决方案: 坚决在应用下新建一个所以分组公用的配置项,将RequestApi中的配置项提

Android高手进阶教程(二十)之---Android与JavaScript方法相互调用!

在Android中通过WebView控件,可以实现要加载的页面与Android方法相互调用,我们要实现WebView中的addJavascriptInterface方法,这样html才能调用android方法,在这里我个人觉得有点和DWR相似. 为了让大家容易理解,我写了一个简单的Demo,具体步骤如下: 第一步:新建一个Android工程,命名为WebViewDemo(这里我在assets里定义了一个html页面). 第二步:修改main.xml布局文件,增加了一个WebView控件还有But

Android 与web的相互调用

这篇文章简单讲解 Android与web的简单交互. 1:Android显示web网页:利用Android的WebView控件展示网页 2:web网页调用Android方法:利用注解的方式将Android的方法公开,在javascript中调用公开的方法. 接下来,展示具体的小例子: 1:WebView显示web网页: 布局: <WebView android:id="@+id/loadWeb" android:layout_width="match_parent&qu

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

如果你有两个java项目的话,如何向他们之间进行信息的通信前提:必须知道要通信的java项目(接收请求方)的服务器的IP地址和访问路径.其实两个java项目之间的通信还是使用HTTP的请求.主要有两种方式:①使用apache的HttpClient方式.②使用JDK自带的java.net包下的HttpURLConnection方式. 这次主要讲解HttpURLConnection方式:HttpURLConnection传递请求常用的有两种方式:POST和GET方式.使用setRequestMeth

目录间文件相互调用

#!/usr/bin/env pythonprint('welcome to my atm')print(__file__)#相对路径import osimport sysprint(os.path.abspath(__file__))#绝对路径print(os.path.dirname(os.path.abspath(__file__)))#上级目录print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))#上级目录BA

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

服务器安装php环境 下载 android-sdk-windows  下载JDK 1.打开zip支持 c:/windows/php.ini ,打开 exec 2.apk 支持mime添加 .apk application/vnd.android.package-archive 3.安装javaSDK(要和android的编辑版本一致) 4.编辑IIS绑定权限(www:www) ,目录没有权限会导致生成失败 5.配置两个虚拟主机 A:down.coolaj.cn  用于下载 B:make.cook

Android程序开发记录:发布APK,权限等

发布APK 参考如下链接: http://chenfeicqq.iteye.com/blog/1889160 问题1:apk拷贝到手机中安装失败 原因:调试程序卸载不完全,需要在应用中选择app,针对所有用户卸载,在安装对应的APK 问题2:apk安装时没有请求必要的权限 原因:未知