2016년 6월 30일 목요일

Android Studio - App 간에 데이터를 넘기면서 실행해보자


0. 내 App 내 다른 Activity 로 데이터를 넘겨서 화면을 전환 시키자
1. 다른 App 에 데이터를 넘겨서 실행시켜보자
2. 내 App도 다른 App 에서 넘겨주는 데이터를 받아서 실행하도록 설정하자
fin. 전환/실행 완료 후 Caller 에게 intent data를 넘기자


[내 App 내 다른 Activity 로 데이터를 넘겨서 화면을 전환 시키자]

1. ItemListActivity 에서 ItemViewActivity로 보내자.

ItemListActivity .java
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    Log.d(ItemListActivity.class.getSimpleName(), position + ", " + id +" 클릭.");
    TodoItem item = data.get(position);
    Intent intent = new Intent(ItemListActivity.this, ItemViewActivity.class);
    intent.putExtra("item", item);
    startActivity(intent);
}

intent.putExtra 함수는 원시타입 외에는 Serializeable 인터페이스 형 객체만 전송이 가능하다.
그렇기 때문에 TodoItem 클래스를 아래와 같이 implements 한다.

TodoItem.java
public class TodoItem implements Serializable{

2. ItemViewActivity 에서 넘겨받은 Intent를 이용해서 수정한다.

ItemViewActivity.java

intent = getIntent();
TodoItem item = (TodoItem)intent.getSerializableExtra("item");

setTitle(item.getTitle());
content.setText(item.getContent());



[다른 App 에 데이터를 넘겨서 실행시켜보자]

App 내의 다른 Activity를 불러올 수 있는 Intent 중에서 명시적 아니고 암시적 Intent 를 이용해서 넘기게 된다.

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, content.getText().toString());
startActivity(Intent.createChooser(intent, "공유할 앱을 선택하세요."));

 - intent.setType : 보낼 데이터 타입을 지정
 - intent.putExtra : 보낼 데이터를 넘김





[내 App도 다른 App 에서 넘겨주는 데이터를 받아서 실행하도록 설정하자]

AndroidManifest.xml 샅샅이 디비보자!

<activity android:name=".ItemViewActivity"    android:theme="@style/AppTheme"/>
<activity android:name=".ItemEditActivity"    android:theme="@style/Theme.AppCompat.Light">
    <intent-filter>
        <action android:name="android.intent.action.SEND"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="text/plain"></data>
    </intent-filter>
</activity>
<activity android:name=".ItemListActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

1. 지금 총 3개의 Activity 가 등록 되어 있다.
 - ItemViewActivity
 - ItemEditActivity
 - ItemListActivity

2. 이 3개의 Activity 중에서 .apk 설치를 통해 바탕화면에 런쳐로 등록될 Activity 는 ItemListActivity 이다.

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

이 intent-filter 라는 태그 중에 category 태그가 바로 그 역할을 해 준다.

3. intent-filter 내 아래 처럼 세팅 하면 다른 App 에서 보내는 데이터를 공유받아 실행될 수 있다.

    <intent-filter>
        <action android:name="android.intent.action.SEND"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="text/plain"></data>
    </intent-filter>

 - action : 어떤 타입의 동작인가 (Intent 보낼 때 Intent.ACTION_** 으로 설정 가능)
 - category : 어떤 카테고리의 동작인가 (Intent 보낼 때 Intent.CATEGORY_** 으로 활용가능하며 리스팅된 모든 category에 일치해야만 동작하게 됨, DEFAULT 는 반드시 있어야함)
 - data : 어떤 타입의 데이터를 받을 것인가


[전환/실행 완료 후 Caller 에게 intent data를 넘기자]

Intent



댓글 없음:

댓글 쓰기