通常我們用到的只是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
