본문 바로가기

카테고리 없음

안드로이드 프로그래밍 - Intent

안드로이드 상에서 화면을 구성하고 있는 activity 간에 data를 전달할수 있는 방법은 Intent 객체를 이용하는 방법이다.

 

2개의 화면(activity) 가 있을때 화면전환을 하고자 한다면 하기와 같이 코딩한다.

버튼 한개를 활성화시켜서 해당 버튼 터치시 Intent 객체에 담아둔 Menuactivity 가 start 된다.

(이때 requestcode 로 101을 전달해준다, requestcode는 onActivityResult 함수에서 다시 활용할 수 있다.

다만 startActivityForResult 를 사용할때만 가능하고 일반적으로startActivity() 만 사용하기도 한다. )

Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(getApplicationContext(),MenuActivity.class);
        startActivityForResult(intent, 101);
    }
});

화면 전환 같은 경우는 한가지 방법이 더있다.

 

Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent2 = new Intent();
        ComponentName name = new ComponentName("com.example.callintent",
                "com.example.callintent.MenuActivity");
        intent2.setComponent(name);
        startActivityForResult(intent2, 101);
        
    }
});

이런식으로 ComponentName을 입력받아 해당 프로젝트내에서 원하는 activity를 열어줄수도 있다.

 

 

 

이어서 전환된 화면에서는 다시 원래화면으로 돌아오면서 추가정보를 전달해주는 코딩을 진행했다.

Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent();
        intent.putExtra("name","mike");
        setResult(RESULT_OK, intent);

        finish();
    }
});

마찬가지로 버튼 터치시 진행되며 새로운 Intent 객체를 생성하여 putExtra() 함수로 name 택을 달고있는 "mike" 라는 문자열 데이터를 intent 에 담아서 setResult 로 전달해준다.

또한 resultcCode 도 같이 전달하는데 여기서는 RESULT_OK 라는 -1의 상수를 전달하였다.

마지막으로 finish()로 해당 화면을 닫아준다.

 

 

protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode == 101){
        if(data != null){
            String name = data.getStringExtra("name");
            if(name != null){
                Toast.makeText(this,"응답으로 받은 데이터 :"+name,Toast.LENGTH_LONG).show();
            }
        }

    }
}

 onActivityResult 는 다시 Mainactivity가 활성화 될때 자동으로 호출되는 메소드이다.

이안에 처음 Intent 객체에 담아 보낸 requestCode와 menuactivity에서 받은 resultCode 그리고 전달받은 data를 받아온다.

여기서 data를 활용하기전에 null 체크는 꼭 해주자 !

 

이어서 이번에는 Intent 객체내에 ACTION_ITEM을 담아서 웹사이트를 연다던지, 통화앱을 열어볼수도 있다.

Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent =new Intent(Intent.ACTION_VIEW, Uri.parse("tel:010-0000-0000"));
        startActivity(intent);
    }
});