본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] Direct Share since MOS

by 돼지왕 왕돼지 2020. 7. 30.
반응형


https://www.bignerdranch.com/blog/implementing-android-marshmallow-direct-share


-

MOS 부터 사용 가능하다.

Content 를 다른 앱 안에 있는 target 에 바로 전달하는 것이다.

예를 들어 어떤 text 를 전달할 때 카카오톡 안의 “어머니”를 바로 선택할 수 있다는 것이다.

(기존에는 앱(카카오톡)을 먼저 선택하고, 카카오톡 앱이 사람(어머니)을 선택하는 기능을 제공하는 형태였다.)




-

app 에서 direct share 를 제공하기 위해서는 아래와 같이 ChooserTargetService extends 한 녀석을 만들고 onGetChooserTargets 를 통해 ChooserTarget list 를 전달해주어야 한다.

class TestChooseTargetService : ChooserTargetService(){
    // 여기서 return 하는 값들이 direct share 에 노출된다.
    // list 의 순서가 그대로 적용되어 노출된다.
    override fun onGetChooserTargets(targetActivityName:ComponentName, filter:IntentFilter):List<ChooserTarget>{
        val targets = ArrayList<ChooserTarget>();
        for( i in 0..targetLength){
            // add ChooserTarget
        }
    }
}


-

ChooserTarget 은 다음의 param 들을 갖는다.

    name

    icon

    ranking score( 0 ~ 1.f 사이 ) : direct share item 이 많으면 우선순위 선별에 사용된다. (낮은 score 를 가진 녀석들이 생략된다.)

    component name : target 이 선택되었을 때 실행할 것

    bundle extras : intent 에 들어갈 것들



-

이제 만든 서비스를 manifest 에 등록해주어야 한다.

<service

    android:name=".TestChooseTargetService"

     android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE">

    <intent-filter>

        <action android:name="android.service.chooser.ChooserTargetService" />

    </intent-filter>

</service>



-

그 다음으로 target 을 선택했을 때 띄울 activity 에 meta-data 를 넣어주어야 한다.


<activity

    android:name=“.targetActivity">

    <intent-filter>

        <action android:name="android.intent.action.SEND" />

        <category android:name="android.intent.category.DEFAULT" />

        <data android:mimeType="text/plain" />

    </intent-filter>

    <meta-data

        android:name="android.service.chooser.chooser_target_service"

        android:value=“.TestChooserTargetService" />

</activity>



-

끝!!




반응형

댓글