跳到主要內容

Android startActivity跟startActivityForResult

當想要切換Activity時,可以用兩個方式,startActivity與startActivityForResult
而這兩個又有什麼分別呢?
假設目前執行是A activity,startActivity就是單純傳資料給B activity並啟動,而startActivityForResult則是多了一件事情,就是當B activity結束時,可以回傳狀態給A activity。

簡單的範例startActivity:AActivity
...
String test = "TEST";
Intent intent = new Intent(context, BActivity.class);
intent.putExtra(BActivity.TEST_PARAM, test);
startActivity(intent);
...

簡單的範例startActivityForResult:AActivity

public static final int REQUEST_CODE = 0;
...
String test = "TEST";
Intent intent = new Intent(context, BActivity.class);
intent.putExtra(BActivity.TEST_PARAM, test);
startActivityForResult(intent, REQUEST_CODE);
...

我們現在完成了開啟與傳資料的動作,當我們使用startActivityForResult,我們必須在BActivity增加setResult且AActivity增加onActivityResult功能才行。

class BActivity ...
...

// 沒有回傳資料的方式
setResult(RESULT_OK)

// 回傳資料的方式
String back = "Back Test";
Intent intent = new Intent();
intent.putExtra(BActivity.TEST_PARAM, back);
setResult(RESULT_OK, intent);

finish();
...


class AActivity ...
...
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case REQUEST_CODE:
            ...
    }
}
...

主要是一個概念呈現,在實做過程中遇到一個問題,那就是BActivity還沒結束但就已經觸發onActivityResult,這有可能是在AndroidManifest.xml裡activity設為android:launchMode="singleTask",改為singleTop就正常了。

參考資料:
Android Developers - Starting Another Activity
stackoverflow - onActivityResult() called prematurely

留言

這個網誌中的熱門文章

What is phpize

What is phpize According to the PHP official document : The phpize command is used to prepare the build environment for a PHP extension. If you need to build such an extension that from github or another code repositories, you can use  build tools to perform the build manually. 

Android開啟Facebook App

如果手機裡已經安裝了Facebook,為什麼還要開啟瀏覽器重新輸入帳密呢? 直接用Facebook操作不是比較方便呢? --以上是前言--XD 所以為了方便已經安裝Facebook使用者,所以App裡開啟粉絲專頁時,應該會有兩種方式 範例如下: ... public static void openFacebookPage (Context context, String id) { Intent intent = null ; try { context. getPackageManager (). getPackageInfo ( "com.facebook.katana" , 0 ); String uri = "fb://page/" + id; intent = new Intent(Intent. ACTION_VIEW , Uri. parse (uri)); } catch (Exception e) { String uri = "https://www.facebook.com/pages/1/" + id; intent = new Intent(Intent. ACTION_VIEW , Uri. parse (uri)); } context. startActivity (intent); } ... 參考資料: android - launch facebook app from other app - Stack Overflow php - Facebook API - How do I get a Facebook user's profile image through the Facebook API (without requiring the user to "Allow" the applicati...

Android 6.0 權限問題

因為總總原因,直到現在才重視這個問題 首先根據 官方文件所述 : 在Android 6.0 (API level 23) 之後分成兩種權限 一般權限(Normal permissions) 危險權限(Dangerous permissions) 列出危險權限的列表 Permission Group Permissions CALENDAR READ_CALENDAR WRITE_CALENDAR CAMERA CAMERA CONTACTS READ_CONTACTS WRITE_CONTACTS GET_ACCOUNTS LOCATION ACCESS_FINE_LOCATION ACCESS_COARSE_LOCATION MICROPHONE RECORD_AUDIO PHONE READ_PHONE_STATE CALL_PHONE READ_CALL_LOG WRITE_CALL_LOG ADD_VOICEMAIL USE_SIP PROCESS_OUTGOING_CALLS SENSORS BODY_SENSORS SMS SEND_SMS RECEIVE_SMS READ_SMS RECEIVE_WAP_PUSH RECEIVE_MMS STORAGE READ_EXTERNAL_STORAGE WRITE_EXTERNAL_STORAGE 不論一般權限與危險權限,都一樣必須在 AndroidManifest.xml 中使用 <uses-permission> 宣告 而最大的差異在於 危險權限必須另外執行請求權限的訊息框 。 附上在 Activity 實做的儲存權限範例: ... public final static int PERMISSION_CODE = 1 ; protected boolean isStoragePermissionGranted () { if (Build. VERSION . SDK_INT >= 23 ) { String permission = android. Man...