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")) {
} 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")) {
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도 만들 수 있을 듯 하다^^
## 이블로그는 어디까지는 찾았던 부분을 잊지 않기 위해 올려놓은 것 입니다.
내용이 부실해도 이해해 주시길 바랍니다.
'나의 플랫폼 > 안드로이드' 카테고리의 다른 글
[Android] 앱을 종료 하고자 할때 (1) | 2015.11.20 |
---|---|
[Apache] Http 관련 라이브러리 사용시 주의사항!! (0) | 2015.11.19 |
[Android] Uri 에서 filePath 가져오기 (2) | 2015.11.18 |
[Android] ACTION_PICK 사용 (이미지 가져오기) (0) | 2015.11.18 |
[Android] ButterKnife Library (0) | 2015.11.18 |