반응형
이전에 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 함수를 이용해서 해당 앱이 사용중인 폰에 설치 되어 있는 지 확인하고 없으면 앱을 설치하도록 유도 페이지로 이동시키면 되는 것이다.
이렇게 코드를 구현해 보았다.
반응형
'모바일 앱(안드로이드)' 카테고리의 다른 글
안드로이드 앱 만들기. 카카오 API V2 로 이전 (8) | 2022.03.21 |
---|---|
안드로이드 앱 만들기 : 유투브 동영상 플레이어 만들기 (0) | 2022.03.17 |
안드로이드 앱 만들기 사전 출시 보고서 접근성에 대해서 (2) | 2022.03.08 |
안드로이드 앱 만들기 sendBroadcast 암시적 ? 명시적 (3) | 2022.03.06 |
안드로이드 앱 만들기 : webView 을 pdf 파일로 만들어서 공유해 보기 (2) | 2022.03.01 |