两个 android 程序间的相互调用(apk 互调),通常我们用到的只是 activity 之间的互相跳转和调用,很少会用到 apk 级别的互相调用。
往往在一些应用上会用到,比如一个支付系统,可能会有很多的一系列的程序调用到:彩票系统、订票系统、团购网…… 全部使用一个支付系统会显的更加专业,也能减少不必要的重复。
下面介绍两种方法从一个 apk 启动另一个 apk。
两个互相调用的项目是:demoapk1 和 demoapk2
第一种: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">
- <intent-filter>
- <category android:name="android.intent.category.LAUNCHER">
- </category>
- </action>
- </intent-filter>
- </activity>
- <intent-filter>
- <category android:name="android.intent.category.DEFAULT">
- </category>
- </action>
- </intent-filter>
- </activity>
- </application>
- </uses-sdk>
- </manifest>
和往常的 xml 一样,只有一点不同:
- <intent-filter>
- <category android:name="android.intent.category.DEFAULT">
- </category>
- </action>
- </intent-filter>
就是给 Pay_Activity 取一个名字,供其他 apk 访问使用。实际效果和第一个方法一样。
就爱阅读 www.92to.com 网友整理上传, 为您提供最全的知识大全, 期待您的分享,转载请注明出处。
来源: http://www.92to.com/bangong/2017/04-05/19986785.html