Android Activity—啟動Activity

來源:互聯網
上載者:User

 

你能夠通過調用startActivity()方法來啟動另外一個Activity,在調用這個方法時要給它傳遞一個你想要啟動的描述Activity的Intent作為參數。這個Intent既可以確切的指定你想要啟動的Activity,也可以是你想要執行的動作的類型的描述(系統會給你選擇相應的Activity,甚至可以從不同的應用程式中選擇)。Intent也能夠攜帶少量的用於啟動Activity所需的資料。

                                                                                                                             

當在自己的應用程式中工作時,你會經常的需要簡單載入一個已知的Activity,你能夠使用類名,通過建立一個你想啟動的明確定義的Activity的Intent來做這件事。例如,下面的例子說明了怎樣啟動一個名叫SignInActivity的Activity。

Intent intent = new Intent(this, SignInActivity.class);

startActivity(intent);

 

你的應用可能要執行諸如發送郵件、簡訊,或使用來自你的Activity的資料更新狀態等動作,而你的應用程式中可能沒有自己的執行這些動作的Activity,因此你能夠使用裝置上其他應用程式提供的Activity來替你執行這些動作,這是Intent的真正價值---你能夠建立一個描述你想執行的動作的Intent,這樣系統就會從其他應用程式中載入響應的的Activity。如果有多個能夠處理這個Intent的Activity,那麼使用者能夠選擇其中之一來使用。例如,如果你想允許使用者發送一個郵件訊息,你能夠建立下面這樣的Intent:

Intent intent = new Intent(Intent.ACTION_SEND);

Intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);

startActivity(intent);

 

附加給Intent的EXTRA_EMAIL是一個要發送郵件的郵件地址字元數組,當郵件應用程式響應這個Intent時,它會讀附加物中提供的字元數組,然後把它們放到郵件格式的”to”欄位中。在這個案例中,郵件應用程式的Activity被啟動,當使用者發送郵件,你的Activity被恢複。

 

為了某個結果啟動一個Activity

某些時候,你可能想要接受來自你啟動的Activity的執行結果,通過調用startActivityForResult()方法來啟動Activity可以到達這個目的(而不是startActivity()方法)。要從後續的Activity中接受執行結果,你必須實現onActivityResult()回調方法,當後續的Activity執行完成,它會在Intent中返回一個結果給你的onActivityResult()方法。

 

例如,你也許想要使用者來選擇一個通訊錄,以便你的Activity能夠用這個通訊錄做一些事情。下面的例子說明了怎樣建立這樣的Intent和處理這個結果:

Private void pickContack(){

//Create an intent to “pick” a contact, as defined by the content provider URI

Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);

startActivityForResult(intent, PICK_CONTACT_REQUEST);

}

 

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // If the request went well (OK) and the request was PICK_CONTACT_REQUEST
    if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST)           {

   // Perform a query to the contact's content provider for the contact's name
        Cursor cursor = getContentResolver().query(data.getData(),
        new String[] {Contacts.DISPLAY_NAME}, null, null, null);
        if (cursor.moveToFirst()) { // True if the cursor is not empty
            int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
            String name = cursor.getString(columnIndex);
            // Do something with the selected contact's name...
        }
    }

 

這個列子展示了為了處理Activity結果在onActivityResult()方法中應該使用的基本邏輯。首先鍵請求結果是否成功---如果成功,那麼resultCode將是RESULT_OK,同時判斷響應的結果是否是請求已知的(在這個例子中,requestCode和用startActivityForResult()方法的第二個參數進行匹配),接下來,代碼通過查詢Intent返回的資料來處理Activity的返回結果。

 

ContentResolver執行的查詢與內容提供的區別是,它返回一個允許查詢資料的遊標來讀取資料,關於更多資訊,請查看Content Providers(內容提供器)文檔。

 

關於使用Intent的更多資訊,請查看Intents and Intent Filters(Intents和Intent過濾器)文檔

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.