通常我們用到的只是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訪問使用。實際效果和第一個方法一樣。
參考地址:
《啟動另外的一個應用程序的Activity(三種方式)》http://www.apkbus.com/android-43480-1-1.html