Notice
Recent Posts
Recent Comments
Link
투케이2K
111. (TWOK/UTIL) [Android/kotlin] C_MoveApp - 외부 앱 실행 , 스키마 실행 , 마켓 이동 , 크롬 기반 외부 링크 이동 본문
투케이2K 유틸파일
111. (TWOK/UTIL) [Android/kotlin] C_MoveApp - 외부 앱 실행 , 스키마 실행 , 마켓 이동 , 크롬 기반 외부 링크 이동
투케이2K 2022. 12. 15. 10:20[설 명]
프로그램 : Android / Kotlin
설 명 : C_MoveApp - 외부 앱 실행 , 스키마 실행 , 마켓 이동 , 크롬 기반 외부 링크 이동
[소스 코드]
package com.example.kotlinproject
import android.content.ActivityNotFoundException
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.util.Log
class C_MoveApp {
/**
* // -----------------------------------------
* TODO [클래스 설명]
* // -----------------------------------------
* 1. 외부 링크 및 외부 앱 이동 클래스
* 2. 외부 앱 실행 , 스키마 실행 , 앱 설치 여부 , 마켓 이동 , 크롬 기반 외부 링크 이동
* // -----------------------------------------
* */
// TODO [빠른 로직 찾기 : 주석 로직 찾기]
/**
* // -----------------------------------------
* // [SEARCH FAST] : [goAppRunLaunch] : 외부 앱이 설치되어 있으면 메인 실행, 아니면 마켓이동 실시
* // -----------------------------------------
* // [SEARCH FAST] : [goAppSchemeMoveLaunch] : 외부 앱이 설치되어 있으면 스키마 실행, 아니면 마켓이동 실시
* // -----------------------------------------
* // [SEARCH FAST] : [goChromeBrowser] : 크롬 브라우저 사용해 외부 링크 이동 실시
* // -----------------------------------------
* // [SEARCH FAST] : [goMarketRun] : 마켓이동 실시 메소드
* // -----------------------------------------
*/
// TODO [companion object >> static 선언 실시]
companion object {
// TODO [SEARCH FAST] : [goAppRunLaunch] : 외부 앱이 설치되어 있으면 메인 실행, 아니면 마켓이동 실시
fun goAppRunLaunch(mContext: Context, packageNames: String) {
/**
* // -----------------------------------------
* [goAppRunLaunch 메소드 설명]
* // -----------------------------------------
* 1. getLaunchIntentForPackage 사용해 외부앱 설치 여부 확인 및 외부앱 실행 실시
* // -----------------------------------------
* 2. 호출 방법 : C_MoveApp.goAppRunLaunch(this@A_Intro, "com.test.app")
* // -----------------------------------------
* 3. 로 직 : 외부앱이 설치되지 않은 경우 앱 설치 진행 / 설치된 경우 외부앱 실행 실시
* // -----------------------------------------
* 4. TODO [중요] AndroidManifest.xml 파일에서 queries >> package 등록 필요
* // -----------------------------------------
* */
// [사전 패키지 명 널 여부 체크]
if (C_Util.stringNotNull(packageNames) == true){
}
else { // [패키지 명이 널인 경우]
Log.i("---","---" + "\n")
Log.e("//===========//","================================================")
Log.i("","\n"+"[C_MoveApp >> goAppRunLaunch() :: 외부 앱 실행 및 마켓 이동 실시 [외부 열기 실패]]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[error :: "+ "패키지 명 null 널 임" +"]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[packageNames :: "+ packageNames +"]")
Log.e("//===========//","================================================")
Log.i("---","---" + "\n")
return
}
// [외부앱이 설치되었는지 확인]
try {
// [특정 패키지 명이 앱에 설치 되어 있는지 확인]
val existPackage = mContext.packageManager.getLaunchIntentForPackage(packageNames)
if (existPackage != null) { // [설치되어 있는 경우]
Log.i("---","---" + "\n")
Log.w("//===========//","================================================")
Log.i("","\n"+"[C_MoveApp >> goAppRunLaunch() :: 외부 앱 실행 및 마켓 이동 실시 [외부 열기]]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[packageNames :: "+ packageNames +"]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[상 태 :: "+ "외부 앱 설치 됨" +"]")
Log.w("//===========//","================================================")
Log.i("---","---" + "\n")
// [인텐트 이동]
val intent = mContext.packageManager.getLaunchIntentForPackage(packageNames)
intent!!.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
mContext.startActivity(intent)
}
else { // [설치되지 않은 경우]
Log.i("---","---" + "\n")
Log.e("//===========//","================================================")
Log.i("","\n"+"[C_MoveApp >> goAppRunLaunch() :: 외부 앱 실행 및 마켓 이동 실시 [마켓 이동]]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[packageNames :: "+ packageNames +"]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[상 태 :: "+ "getLaunchIntentForPackage Is Null >> 외부 앱 설치 안됨" +"]")
Log.e("//===========//","================================================")
Log.i("---","---" + "\n")
// [구글 플레이스토어 이동]
val marketLaunch = Intent(Intent.ACTION_VIEW)
marketLaunch.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
marketLaunch.data = Uri.parse("market://details?id=$packageNames")
mContext.startActivity(marketLaunch)
}
}
catch (e: ActivityNotFoundException) {
// [이동할 패키지 명을 찾이 못한 경우]
Log.i("---","---" + "\n")
Log.e("//===========//","================================================")
Log.i("","\n"+"[C_MoveApp >> goAppRunLaunch() :: 외부 앱 실행 및 마켓 이동 실시 [마켓 이동]]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[packageNames :: "+ packageNames +"]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[상 태 :: "+ "ActivityNotFoundException >> 외부 앱 설치 안됨" +"]")
Log.e("//===========//","================================================")
Log.i("---","---" + "\n")
// [구글 플레이스토어 이동]
val marketLaunch = Intent(Intent.ACTION_VIEW)
marketLaunch.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
marketLaunch.data = Uri.parse("market://details?id=$packageNames")
mContext.startActivity(marketLaunch)
}
catch (e: Exception) {
Log.i("---","---" + "\n")
Log.e("//===========//","================================================")
Log.i("","\n"+"[C_MoveApp >> goAppRunLaunch() :: 외부 앱 실행 및 마켓 이동 실시 [에러 발생]]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[error :: "+ e.message +"]")
Log.e("//===========//","================================================")
Log.i("---","---" + "\n")
}
}
// TODO [SEARCH FAST] : [goAppSchemeMoveLaunch] : 외부 앱이 설치되어 있으면 스키마 실행, 아니면 마켓이동 실시
fun goAppSchemeMoveLaunch(mContext: Context, packageNames: String, scheme: String) {
/**
* // -----------------------------------------
* [goAppSchemeMoveLaunch 메소드 설명]
* // -----------------------------------------
* 1. getLaunchIntentForPackage 사용해 외부앱 설치 여부 확인 및 외부앱 스키마 실행 실시
* // -----------------------------------------
* 2. 호출 방법 : C_MoveApp.goAppSchemeMoveLaunch(this@A_Intro, "com.test.app", "test://call?name=twok&age=29")
* // -----------------------------------------
* 3. 로 직 : 외부앱이 설치되지 않은 경우 앱 설치 진행 / 설치된 경우 외부앱 스키마 실행 실시
* // -----------------------------------------
* 4. TODO [중요] AndroidManifest.xml 파일에서 queries >> package 등록 필요
* // -----------------------------------------
* */
// [사전 패키지 명 널 여부 체크]
if (C_Util.stringNotNull(packageNames) == true){
}
else { // [패키지 명이 널인 경우]
Log.i("---","---" + "\n")
Log.e("//===========//","================================================")
Log.i("","\n"+"[C_MoveApp >> goAppSchemeMoveLaunch() :: 외부 앱 스키마 실행 및 마켓 이동 실시 [외부 열기 실패]]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[error :: "+ "패키지 명 null 널 임" +"]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[packageNames :: "+ packageNames +"]")
Log.e("//===========//","================================================")
Log.i("---","---" + "\n")
return
}
// [사전 스키마 널 여부 체크]
if (C_Util.stringNotNull(scheme) == true){
}
else { // [패키지 명이 널인 경우]
Log.i("---","---" + "\n")
Log.e("//===========//","================================================")
Log.i("","\n"+"[C_MoveApp >> goAppSchemeMoveLaunch() :: 외부 앱 스키마 실행 및 마켓 이동 실시 [외부 열기 실패]]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[error :: "+ "스키마 null 널 임" +"]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[packageNames :: "+ scheme +"]")
Log.e("//===========//","================================================")
Log.i("---","---" + "\n")
return
}
// [외부앱이 설치되었는지 확인]
try {
// [특정 패키지 명이 앱에 설치 되어 있는지 확인]
val existPackage = mContext.packageManager.getLaunchIntentForPackage(packageNames)
if (existPackage != null) { // [설치되어 있는 경우]
Log.i("---","---" + "\n")
Log.w("//===========//","================================================")
Log.i("","\n"+"[C_MoveApp >> goAppSchemeMoveLaunch() :: 외부 앱 스키마 실행 및 마켓 이동 실시 [외부 앱 스키마 열기]]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[packageNames :: "+ packageNames +"]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[scheme :: "+ scheme +"]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[상 태 :: "+ "외부 앱 설치 됨" +"]")
Log.w("//===========//","================================================")
Log.i("---","---" + "\n")
// [형식] : testScheme://testHost?name=kwon&idno=1234
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(scheme))
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
mContext.startActivity(intent)
}
else { // [설치되지 않은 경우]
Log.i("---","---" + "\n")
Log.e("//===========//","================================================")
Log.i("","\n"+"[C_MoveApp >> goAppSchemeMoveLaunch() :: 외부 앱 스키마 실행 및 마켓 이동 실시 [마켓 이동]]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[packageNames :: "+ packageNames +"]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[상 태 :: "+ "getLaunchIntentForPackage Is Null >> 외부 앱 설치 안됨" +"]")
Log.e("//===========//","================================================")
Log.i("---","---" + "\n")
// [구글 플레이스토어 이동]
val marketLaunch = Intent(Intent.ACTION_VIEW)
marketLaunch.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
marketLaunch.data = Uri.parse("market://details?id=$packageNames")
mContext.startActivity(marketLaunch)
}
}
catch (e: ActivityNotFoundException) {
// [이동할 패키지 명을 찾이 못한 경우]
Log.i("---","---" + "\n")
Log.e("//===========//","================================================")
Log.i("","\n"+"[C_MoveApp >> goAppSchemeMoveLaunch() :: 외부 앱 스키마 실행 및 마켓 이동 실시 [마켓 이동]]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[packageNames :: "+ packageNames +"]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[상 태 :: "+ "ActivityNotFoundException >> 외부 앱 설치 안됨" +"]")
Log.e("//===========//","================================================")
Log.i("---","---" + "\n")
// [구글 플레이스토어 이동]
val marketLaunch = Intent(Intent.ACTION_VIEW)
marketLaunch.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
marketLaunch.data = Uri.parse("market://details?id=$packageNames")
mContext.startActivity(marketLaunch)
}
catch (e: Exception) {
Log.i("---","---" + "\n")
Log.e("//===========//","================================================")
Log.i("","\n"+"[C_MoveApp >> goAppSchemeMoveLaunch() :: 외부 앱 스키마 실행 및 마켓 이동 실시 [에러 발생]]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[error :: "+ e.message +"]")
Log.e("//===========//","================================================")
Log.i("---","---" + "\n")
}
}
// TODO [SEARCH FAST] : [goChromeBrowser] : 크롬 브라우저 사용해 외부 링크 이동 실시
fun goChromeBrowser(mContext: Context, url: String) {
/**
* // -----------------------------------------
* [goChromeBrowser 메소드 설명]
* // -----------------------------------------
* 1. 크롬 브라우저 사용해 외부 링크 이동 실시
* // -----------------------------------------
* 2. 호출 방법 : C_MoveApp.goChromeBrowser(this@A_Intro, "https://www.naver.com")
* // -----------------------------------------
* 3. 로 직 : 크롬 앱이 설치된 경우 크롬 브라우저 외부 링크 이동 / 아니면 기본 URL 외부 링크 이동 실시
* // -----------------------------------------
* 4. TODO [중요] AndroidManifest.xml 파일에서 queries >> package 등록 필요 (com.android.chrome)
* // -----------------------------------------
* */
// [URL 주소 공백 제거 실시]
val urlData = url.replace(" ","")
// [사전 주소 널 여부 체크]
if (C_Util.stringNotNull(urlData) == true){
}
else { // [패키지 명이 널인 경우]
Log.i("---","---" + "\n")
Log.e("//===========//","================================================")
Log.i("","\n"+"[C_MoveApp >> goChromeBrowser() :: 크롬 브라우저 사용해 외부 링크 이동 실시]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[error :: "+ "주소 null 널 임" +"]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[url :: "+ urlData +"]")
Log.e("//===========//","================================================")
Log.i("---","---" + "\n")
return
}
// [사전 주소 http 시작 체크]
if (urlData.startsWith("http://") == true || urlData.startsWith("https://") == true){
}
else { // [패키지 명이 널인 경우]
Log.i("---","---" + "\n")
Log.e("//===========//","================================================")
Log.i("","\n"+"[C_MoveApp >> goChromeBrowser() :: 크롬 브라우저 사용해 외부 링크 이동 실시]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[error :: "+ "주소 http 시작 아님" +"]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[url :: "+ urlData +"]")
Log.e("//===========//","================================================")
Log.i("---","---" + "\n")
return
}
// [외부앱이 설치되었는지 확인]
try {
// [크롬 특정 패키지 명 변수 선언]
val packageNames = "com.android.chrome"
// [특정 패키지 명이 앱에 설치 되어 있는지 확인]
val existPackage = mContext.packageManager.getLaunchIntentForPackage(packageNames)
if (existPackage != null) { // [설치되어 있는 경우]
Log.i("---","---" + "\n")
Log.w("//===========//","================================================")
Log.i("","\n"+"[C_MoveApp >> goChromeBrowser() :: 크롬 브라우저 사용해 외부 링크 이동 실시]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[packageNames :: "+ packageNames +"]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[url :: "+ urlData +"]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[상 태 :: "+ "크롬 설치 됨" +"]")
Log.w("//===========//","================================================")
Log.i("---","---" + "\n")
// [크롬 브라우저를 통해 외부 링크 호출]
val intent = Intent(Intent.ACTION_VIEW)
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
intent.setPackage(packageNames) // [크롬 브라우저 지정]
intent.data = Uri.parse(urlData) // [공백 제거]
mContext.startActivity(intent)
}
else { // [설치되지 않은 경우]
Log.i("---","---" + "\n")
Log.e("//===========//","================================================")
Log.i("","\n"+"[C_MoveApp >> goChromeBrowser() :: 크롬 브라우저 사용해 외부 링크 이동 실시]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[url :: "+ urlData +"]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[상 태 :: "+ "getLaunchIntentForPackage Is Null >> 크롬 설치 안됨 >> 일반 브라우저 사용 링크 이동" +"]")
Log.e("//===========//","================================================")
Log.i("---","---" + "\n")
// [일반 브라우저 외부링크 이동 실시]
val go = Intent(Intent.ACTION_VIEW)
go.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
go.data = Uri.parse(urlData) // [공백 제거]
mContext.startActivity(go)
}
}
catch (e: ActivityNotFoundException) {
// [이동할 패키지 명을 찾이 못한 경우]
Log.i("---","---" + "\n")
Log.e("//===========//","================================================")
Log.i("","\n"+"[C_MoveApp >> goChromeBrowser() :: 크롬 브라우저 사용해 외부 링크 이동 실시]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[url :: "+ urlData +"]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[상 태 :: "+ "ActivityNotFoundException >> 크롬 설치 안됨 >> 일반 브라우저 사용 링크 이동" +"]")
Log.e("//===========//","================================================")
Log.i("---","---" + "\n")
// [일반 브라우저 외부링크 이동 실시]
val go = Intent(Intent.ACTION_VIEW)
go.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
go.data = Uri.parse(urlData) // [공백 제거]
mContext.startActivity(go)
}
catch (e: Exception) {
Log.i("---","---" + "\n")
Log.e("//===========//","================================================")
Log.i("","\n"+"[C_MoveApp >> goChromeBrowser() :: 크롬 브라우저 사용해 외부 링크 이동 실시 [에러 발생]]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[error :: "+ e.message +"]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[url :: "+ urlData +"]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[상 태 :: "+ "일반 브라우저 사용 링크 이동" +"]")
Log.e("//===========//","================================================")
Log.i("---","---" + "\n")
// [일반 브라우저 외부링크 이동 실시]
val go = Intent(Intent.ACTION_VIEW)
go.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
go.data = Uri.parse(urlData) // [공백 제거]
mContext.startActivity(go)
}
}
// TODO [SEARCH FAST] : [goMarketRun] : 마켓이동 실시 메소드
fun goMarketRun(mContext: Context, packageNames: String) {
/**
* // -----------------------------------------
* [goMarketRun 메소드 설명]
* // -----------------------------------------
* 1. 패키지 명을 사용해 구글 플레이스토어 마켓 이동 실시
* // -----------------------------------------
* 2. 호출 방법 : C_MoveApp.goMarketRun(this@A_Intro, "com.test.app")
* // -----------------------------------------
* */
// [사전 패키지 명 널 여부 체크]
if (C_Util.stringNotNull(packageNames) == true){
}
else { // [패키지 명이 널인 경우]
Log.i("---","---" + "\n")
Log.e("//===========//","================================================")
Log.i("","\n"+"[C_MoveApp >> goMarketRun() :: 앱 마켓 이동 실시]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[error :: "+ "패키지 명 null 널 임" +"]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[packageNames :: "+ packageNames +"]")
Log.e("//===========//","================================================")
Log.i("---","---" + "\n")
return
}
// [로직 처리 실시]
try {
Log.i("---","---" + "\n")
Log.w("//===========//","================================================")
Log.i("","\n"+"[C_MoveApp >> goMarketRun() :: 앱 마켓 이동 실시 [수행]]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[packageNames :: "+ packageNames +"]")
Log.w("//===========//","================================================")
Log.i("---","---" + "\n")
// [구글 플레이스토어 앱에서 이동한다]
val marketLaunch = Intent(Intent.ACTION_VIEW)
marketLaunch.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
marketLaunch.data = Uri.parse("market://details?id=$packageNames")
mContext.startActivity(marketLaunch)
}
catch (e: Exception) {
Log.i("---","---" + "\n")
Log.e("//===========//","================================================")
Log.i("","\n"+"[C_MoveApp >> goMarketRun() :: 앱 마켓 이동 실시 [에러]]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[error :: "+ e.message +"]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[packageNames :: "+ packageNames +"]")
Log.i("","\n"+"-----------------------------------------")
Log.i("","\n"+"[로 직 :: "+ "http 주소로 마켓 이동 실시" +"]")
Log.e("//===========//","================================================")
Log.i("---","---" + "\n")
// [구글 플레이스토어 앱이 없을 경우 홈페이지에서 이동한다]
val marketLaunch = Intent(Intent.ACTION_VIEW)
marketLaunch.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
marketLaunch.data = Uri.parse("https://play.google.com/store/apps/details?id=$packageNames")
mContext.startActivity(marketLaunch)
}
}
} // [companion 종료]
} // TODO [클래스 종료]
반응형
'투케이2K 유틸파일' 카테고리의 다른 글
Comments