원본출처: 티스토리 바로가기
이전에 posting 했던 pdf 공유 하기이 다음 이야기 정도가 될 것 같다. 요 몇일은 앱 수리를 하느라.. 좀
아무튼 이번에 작업하면서 찾아낸 것에 대해서 기억을 정리해 두어야 겠다.
이번에 하게 된 일은 pdf 을 만들어서 공유를 하는 것인데, 방법이 2가지 정도는 되는 것 같다.
첫번째는 이전 posting 에서 처럼 공유할 파일만 지정해서 ACTION_SEND 액션을 실행하는 방법이고, 이번에는 그것을 특정앱으로 한정해 보는 것이다.
public void sharePdf(String sPackageName) { File pdfFile = new File(getCacheDir(), "/" + fileName + ".pdf"); Uri contentUri = FileProvider.getUriForFile(getApplicationContext(), getApplicationContext().getPackageName()+".fileProvider", pdfFile); Intent shareIntent = new Intent(Intent.ACTION_SEND); shareIntent.setType("application/pdf"); shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri); shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); shareIntent.setPackage(sPackageName); if (getPackageList(sPackageName)) { shareIntent.setPackage(sPackageName); shareIntent.putExtra(Intent.EXTRA_SUBJECT, "전달할 제목"); shareIntent.putExtra(Intent.EXTRA_TEXT, "전달할 메시지 내용."); startActivity(Intent.createChooser(shareIntent, "알림TITLE")); } else { String url = "market://details?id=" + sPackageName; Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(i); } } public boolean getPackageList(String packageName) { boolean isExist = false; PackageManager pkgMgr = getPackageManager(); List<ResolveInfo> mApps; Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); mApps = pkgMgr.queryIntentActivities(mainIntent, 0); try { for (int i = 0; i < mApps.size(); i++) { Log.e("PackageName=", "" + mApps.get(i).activityInfo.packageName); if(mApps.get(i).activityInfo.packageName.startsWith(packageName)){ isExist = true; break; } } } catch (Exception e) { isExist = false; } return isExist; }
이렇게 함수를 만들어 놓으면 구현 가능한 부분이 쉬워진다. 보내고 싶은 앱의 패키지 이름만 알아낸다면 그 앱으로 내가 만든 파일 (예시에서는 pdf 가 있다고 가정했다.) 을 바로 전달을 하게 되는 것이다.
// com.dho.mobilefax : skt 모바일 팩스 // com.google.android.gm : gmail // com.google.android.apps.docs : google drive 문서저장 // com.samsung.android.messaging : 삼성 문자 메시지 // com.google.android.apps.messaging : 구글 기본 메시지 // net.daum.android.mail : 다음메일 // com.kakao.talk : 카카오톡 // com.sec.print.mobileprint : 삼성모바일 프린트 // epson.print : epson print
예을 들면 이런 package name 을 찾아서 위에서 기술한 함수에 호출을 넣어 주면 된다. 그리고 위 예시 소스에서 getPackageList 함수를 이용해서 해당 앱이 사용중인 폰에 설치 되어 있는 지 확인하고 없으면 앱을 설치하도록 유도 페이지로 이동시키면 되는 것이다.
이렇게 코드를 구현해 보았다.
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
댓글
댓글 쓰기