맨날 Start만 하는 Activity. 그래놓고 제대로 시작한 적은 있냐
728x90
반응형

startActivity

startActivityForResult

onActivityResult


이름도 비슷하고 비슷한 타이밍에 쓰고.

골치가 아프고 코드도 아프고.

이참에 한번 제대로 보자.


  

왼쪽의 리스트 화면에서 오른쪽 화면으로 이동 후 저장이나 Back을 누르면

다시 왼쪽 화면으로 돌아오는 로직을 만드는 중이었다.



앞에서 언급한 bitmap 처리과정에서 Activity의 영향력을 볼 수 있었다.

어떤 블로그에서 언급한 얘기를 여기에 옮겨본다.

onActivityResult는,

정말 간단하게 설명하면 Activity A와 B가 있을 때,

A에서 B로 갔다가 다시 A로 넘어올 때 사용하는, 안드로이드에서 제공하는 기본 메소드입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     super.onActivityResult(requestCode, resultCode, data);
    Log.i(TAG, "------ onActivityResult");
    if(data != null){
        Uri imageUri = data.getData();    // Intent에서 받아온 갤러리 URI
        String selections[] = { MediaStore.Images.Media.DATA}; // 실제 이미지 패스 데이터
        Cursor cursor = getContentResolver().query(imageUri, selections, null,null,null);
        if(cursor.moveToNext()){
            String imagePath = cursor.getString(0);  // 사이즈 지정 옵션
            setAddGroupBitmap(imagePath);
            Log.i(TAG, "------ addGroup.setAddGroupBitmap");
        }
    }
}
cs


이번 경우 이미지를 업로드하는 화면에서 업로드한 이미지를 보여주는 리스트 화면으로 돌아와야 하는 상황이었다.

빨간 음영의 부분이 이미지 업로드 처리하는 부분이다.

위와 같이 커서를 쓰는 이유는 다수의 이미지를 처리 가능한 소스로 사용했기 때문이다.

본격적으로 들어가기에 앞서 content provider 라는 것에 대해 알아야 합니다. 왜냐하면 Android 플랫폼은 사용자 기기 내의 이미지 파일들을 구조화된 데이터셋으로 관리를 하는데 이것에 접근하기 위한 인터페이스를 제공하는 것이 바로 이 content provider이기 때문입니다.

그렇다면 content provider가 제공하는 데이터에 대한 접근은 어떻게 할까요? ContentResolver 클래스의 객체를 클라이언트로써 데이터에 접근합니다. ContentResolver 객체는 Context 객체에서 얻을 수 있습니다.

출저 : http://shygiants.github.io/android/2016/01/13/contentresolver.html

그렇다면 startActivity와 startActivityForResult는 어떻게 다를까.

내 설명보다 더 좋은 자료가 있으니 그곳을 참고하시길.


728x90
반응형