본문 바로가기

나의 플랫폼/안드로이드

[Android] SNS로 데이터 공유하기

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

SNS (Facebook, Kakaotalk등) 에 Text, Image, URL 을 보낼 수가 있다.


모든 SNS에 데이터를 무작정 보내면 좋겠지만, SNS App 마다 동작이 다르다.

그래서 테스트를 좀 해보면서 분리를 시켜 보았다.


## Get SNS App list


Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/*");

 // image 타입을 받을 수 있는 SNS App 정보를 전부 뽑아준다.

List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(intent, 0);
if (resInfo.isEmpty()) {
return;
}


for (ResolveInfo info : resInfo) {
if (info.activityInfo.packageName.toLowerCase().equals("com.facebook.katana")) {
//facebook
} else {
// 다른 App
}

}



## 데이터 전송 형태


1. only Image

shareIntent.setType("image/*");
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///"+mImagePath));

2. only text (링크도 적용 된다.)

shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, "http://www.google.com");

3. Image + text

shareIntent.setType("image/*");
shareIntent.putExtra(Intent.EXTRA_TEXT, "구글 http://www.google.com #google");
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///"+mImagePath));



## SNS App 별 특징


- FaceBook : only Image 나 only link (text에 url 경로를 넣어줌.)

- KakaoTalk : only Image 나 text+link (text와 link를 묶어서 보낸다.)

- Twitter : Image + text + link ( link는 트윗 하고 나면 자동 링크로 변경 되어 있음)

그외 어플은 되도록 Twitter 와 같이 모두 붙여서 사용할 수 있다.


※ KakaoTalk 경우 KakaoLink API를 이용하면 좀 더 할 수 있는게 많기 때문에 이걸 이용하는걸로 바꾸시면 될듯 하다.

   https://developers.kakao.com/docs/android


## 풀 소스


private void sendShare() {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/*");

List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(intent, 0);
if (resInfo.isEmpty()) {
return;
}

List<Intent> shareIntentList = new ArrayList<Intent>();

for (ResolveInfo info : resInfo) {
Intent shareIntent = (Intent) intent.clone();

if (info.activityInfo.packageName.toLowerCase().equals("com.facebook.katana")) {
//facebook
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, "http://www.google.com");
// shareIntent.setType("image/jpg");
// shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///"+mImagePath));
} else {
shareIntent.setType("image/*");
shareIntent.putExtra(Intent.EXTRA_SUBJECT, "제목");
shareIntent.putExtra(Intent.EXTRA_TEXT, "구글 http://www.google.com #");
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///"+mImagePath));
}
shareIntent.setPackage(info.activityInfo.packageName);
shareIntentList.add(shareIntent);
}

Intent chooserIntent = Intent.createChooser(shareIntentList.remove(0), "select");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, shareIntentList.toArray(new Parcelable[]{}));
startActivity(chooserIntent);
}


여기서 궁금한 부분이 분명 EXTRA_INITIAL_INTENTS 일 것이다. 이게 왜 필요한거지?? 

한 intent 에 여러 Intent를 묶어서 실행을 시킬 수 있다.

http://mrgamza.tistory.com/155


따라서, list 중 가장 첫밴째 intent를 지우면서 리턴 받은 intent에 나머지 Intent를 묶어서 실행하를 하는 것이다.


PopupView를 이용해서 나만의 SNS list도 만들 수 있을 듯 하다^^


## 이블로그는 어디까지는 찾았던 부분을 잊지 않기 위해 올려놓은 것 입니다.

    내용이 부실해도 이해해 주시길 바랍니다.