Activity是android系統的三大組件之一,他可以跨進程去調用別的進程中的activity。
1.前提:
被調用的activity必須是共享的。在電話撥號器的例子中,
- ntent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:12345678"));
- startActivity(callIntent);
執行完這些代碼后,該應用程序就會去調用系統的撥號功能,實現撥號。其實系統的撥號功能也是有一個activity實現的,系統把這個activity共享了,給他注冊了一個id號叫做:android.intent.action.CALL
2.怎么實現activity的共享
就是給activity注冊一個唯一標識符action。在功能配置文件中的意圖過濾器中配置他,他的元素名稱叫做action,我們可以稱之為動作,他的作用是告訴android做什么,就是要去調用那個activity實現功能。
3.如何調用別的進程中的activity
這里就要用到意圖了,intent是一種運行時綁定機制,他有效地降低了android中組件的耦合性。意圖通過意圖,程序可以向android系統表達某種意願或訴求,讓系統執行某些動作,他還可以激活新的activity或者讓activity執行新的動作。intent的構造函數有一個是這樣的Intent(String action, Uri uri),第一個參數是共享的activity的唯一標識符。第二個參數是uri。它包括協議和數據。activity的Intent-filter是相 對應的,action能夠匹配出由那個activity來執行動作,uri來告訴這個activity具體干什么。因為一個activity可以配置多個 Intent-filter,例如記事本程序的NoteEditor activity有兩個filter -- 一個啟動並顯示一個特定的記錄給用戶查看或編輯, 另一個啟動一個空的記錄給用戶編輯.
4.如何傳遞數據
所有的數據都是通過intent來傳遞的,但是我們可以根據實現方式的不同來划分為兩種方式,第一種直接在uri中綁定數據,通常為協議頭+數據,例如Uri.parse("tel:12345678")); 另一種方式是通過intent的put**方法來綁定數據或者intent直接綁定bundler對象。
5.當調用一個新的activity之后,如何獲得這個activity的返回值
使用startActivityForResult方法來啟動其他應用程序的Activity,以便獲得Activity的返回值
然后在InvokeActivity中使用下面的代碼來調用Main。
- intent = new Intent("net.blogjava.mobile.MYACTION", Uri.parse("info://調用其他應用程序的Activity"));
- intent.putExtra("value", "調用成功");
- startActivityForResult(intent, 1); // 1為請求碼
獲得返回值:必須要實現onActivityResult方法
- protected void onActivityResult(int requestCode, int resultCode, Intent data)
- {
- Toast.makeText(this, "返回值:" + data.getExtras().getString("result"),
- Toast.LENGTH_LONG).show();
- }
總結:跨進程訪問Activity(訪問其他應用程序中的Activity)主要是通過一個Action來完成的,如果要傳遞數據,還需要指定一個 Uri。當然,傳遞數據也可以通過Intent來完成。傳遞數據的過程可以是雙向的。如果要想從調用的Activity中返回數據,就需要使用 startActivityForResult方法來啟動Activity了。