티스토리 툴바

BLOG main image
2010 인영이 (12)
끄적끄적 일기 (4)
인영이의 서재 (1)
끄적끄적 감상 (1)
인영이의 공부 (1)
기웃거리기 (3)
418 Visitors up to today!
Today 0 hit, Yesterday 0 hit
daisy rss
tistory 티스토리 가입하기!
2010/04/28 01:32
in·tend 미국∙영국 [In|tend] : 1.   의도[작정]하다, (…하려고) 생각하다

안드로메다 Intent를 공부하고 있어요. Intent의 쓰임을 볼까요?

- 누   가? Application의 Componet가
- 무엇을? Application의 Core 구성요소인 activities, services, broadcast receivers을 (에게)
- 왜   에? ① 3가지 구성요소를 실행시키거나(일종의 재사용성도 포함), ② 이들간 데이터를 주고받기 위해
- 어떻게? ① 명시적으로 - Application의 Core 구성요소의 class? 이름을 직접 지명
              ② 암시적으로 - action/category/data 3가지 attr를 통한 intent-filter에 걸려들게 해서..^^

각각에 대한 코드를 봅시다.


MyIntentActivity의 Button 위젯을 클릭하여 YourIntentActivity를 명시적인 방법으로 호출해보지요.

 

<MyIntentActivity.java>
public class MyIntentActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main1);
       
        Button bnt = (Button)findViewById(R.id.Button01);
        bnt.setOnClickListener(new OnClickListener() {
           
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(MyIntentActivity.this,
                                   com.your.yourintent.YourIntentActivity.class);
                startActivity(intent);
            }
        });
    }
}

<AndroidMenifest.xml>
        <activity android:name=".MyIntentActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.your.yourintent.YourIntentActivity"
                  android:label="@string/app_name">
        </activity>


자, 명시적인 방법대신 action, category, data의 요소를 이용하여 암시적으로 Activity를 호출해 볼까요?
다음과 같이 수정만하면 됩니다. action으로 호출해 보지요.

<MyIntentActivity.java>
......
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent("com.your.yourintent.TEST");
                startActivity(intent);
            }
        });
......

<AndroidMenifest.xml>
......
        <activity android:name="com.your.yourintent.YourIntentActivity"
                  android:label="@string/app_name">
           <intent-filter>
                <action android:name="com.your.yourintent.TEST" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
......


다른 activity에서 Intent를 통해 데이터를 가져와볼까요?
MyIntentActivity의 Button 위젯을 클릭하면 YourIntentActivity가 호출됩니다. -> 이때 YourIntentActivity의 TextView값을 가져와서 intent의 결과값으로 저장합니다. YourIntentActivity의 Button 위젯을 클릭하면 -> MyIntentActivity가 호출되고 결과값으로 전달받은 값을 자신의 TextView에 표시합니다.


<MyIntentActivity.java>
public class MyIntentActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main1);
       
        Button bnt = (Button)findViewById(R.id.Button01);
        bnt.setOnClickListener(new OnClickListener() {
                      
            public void onClick(View v) {
                // TODO Auto-generated method stub
    Intent intent = new Intent("com.your.yourintent.TEST");
                startActivityForResult(intent, 0);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        TextView txt = (TextView)findViewById(R.id.Txt01);
       
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode == RESULT_OK)
        {
            if(requestCode == 0)
            {
                txt.setText(data.getExtras().get("data").toString());
            }
        }
    }
}

<YourIntentActivity.java>
......
public class YourIntentActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main2);
       
           Button bnt = (Button)findViewById(R.id.Button01);
           final TextView txt = (TextView)findViewById(R.id.Txt02);
           bnt.setOnClickListener(new OnClickListener() {
               
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Intent intent = getIntent();
                    intent.putExtra("data", txt.getText());
                    setResult(RESULT_OK,intent);
                    finish();                   
                }
            });
    }

}
......


마지막으로 MyIntentActivity의 TextViewer에 있는 값을 YourIntentActivity로 전달하는 예를 볼까요?
MyIntentActivity의 Button 위젯을 클릭하면 Intent에 TextVeiw에 있는 값을 저장합니다. 그리고 YourIntentActivity가 호출합니다. -> YourIntentActivity의 Button 위젯을 클릭하면 -> 자신의 TextView에 MyIntentActivity로부터 전달받은 Intent의 값을 표시합니다.


<MyIntentActivity.java>
......    
       @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                TextView txt = (TextView)findViewById(R.id.txt01);
               
                Intent intent = new Intent();
                Bundle bundle = new Bundle();
               
                bundle.putCharSequence("data", txt.getText());
                intent.setClass(MyIntentActivity.this, com.your.yourintent.YourIntentActivity.class);
                intent.putExtras(bundle);
                startActivity(intent);
            }
        });
......

<YourIntentActivity.java>
......
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                TextView txt = (TextView)findViewById(R.id.txt02);
                Intent intent = getIntent();
                txt.setText(intent.getExtras().getString("data"));
               
            }
        });
......

Intent를 사용하는 법을 알았으니, permission과 uses-permission을 통해 접근제어하는 법도 공부해봐야 겠네요. ^.^

'인영이의 공부 > 안드로메다' 카테고리의 다른 글

in·tend 미국∙영국 [In|tend]  (0) 2010/04/28
Trackback Address :: http://shininyoung.tistory.com/trackback/10 관련글 쓰기
Name
Password
Homepage
Secret