|
轉(zhuǎn)自:http://blog.csdn.net/annaleeya/article/details/8475053 通常我們用到的只是activity之間的互相跳轉(zhuǎn)和調(diào)用,很少會用到apk級別的互相調(diào)用。 往往在一些應(yīng)用上會用到,比如一個支付系統(tǒng),可能會有很多的一系列的程序調(diào)用到:彩票系統(tǒng)、訂票系統(tǒng)、團購網(wǎng)……全部使用一個支付系統(tǒng)會顯的更加專業(yè),也能減少不必要的重復(fù)。 下面介紹兩種方法從一個apk啟動另一個apk。 兩個互相調(diào)用的項目是:demoapk1和demoapk2 demoapk2是被調(diào)用的,我們調(diào)用它的Pay_Activity.java 所有的界面都是最簡單的 這是第一個demoapk1
這是demoapk2的主要activity
這是apk2點擊后跳轉(zhuǎn)到結(jié)果(同一個apk中的跳轉(zhuǎn))
這是apk1跳轉(zhuǎn)到apk2的得到的結(jié)果(注意上方apk的title)
第一種:ComponentName() 使用ComponentName()可以跳轉(zhuǎn)到任何一個activity,不論是不是main activity。也不必寫修改被調(diào)用的apk的AndroidManifest.xml任何內(nèi)容,如下: 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( //這個是另外一個應(yīng)用程序的包名 "com.hooy.apk2", //這個參數(shù)是要啟動的Activity "com.hooy.apk2.Pay_Activity"); // Intent intent= new Intent("chroya.foo"); Intent intent= new Intent(); //我們給他添加一個參數(shù)表示從apk1傳過去的 Bundle bundle = new Bundle(); bundle.putString("arge1", "這是跳轉(zhuǎn)過來的!來自apk1"); intent.putExtras(bundle); intent.setComponent(componetName); startActivity(intent); return super.onTouchEvent(event); } } ComponentName的參數(shù)已經(jīng)寫的比較詳細了 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); //改變文字內(nèi)容,標(biāo)志這是從activity跳轉(zhuǎn)過來的 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);//這里將顯示“這是跳轉(zhuǎn)過來的!來自apk1” }else{ System.out.println("空的參數(shù)"); } } } 第一種方法也是比較簡單。 第二種方法Intent+AndroidManifest.xml
顧名思義,此方法是用Intent和修改AndroidManifest.xml達成的。 intent就是我在上面第一個Demoapk1Activity中注釋掉的內(nèi)容 要修改的AndroidManifest.xml是demoapk2中的。 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas./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"/> <categoryandroid:name="android.intent.category.DEFAULT"/> </intent-filter> 就是給Pay_Activity取一個名字,供其他apk訪問使用。實際效果和第一個方法一樣。 參考地址: 《啟動另外的一個應(yīng)用程序的Activity(三種方式)》http://www./android-43480-1-1.html |
|
|