먼저 기기에 설치되어있는지 확인 후 설치되어있으면 앱 실행.
안되어있으면 설치할 마켓 주소로 연결 시켜준다
// 태블릿에 설치된 패키지 리스트
fun getPackageList(): Boolean {
var isExist = false
val pkgMgr = mContext.packageManager
val mainIntent = Intent(Intent.ACTION_MAIN, null)
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER)
// 설치된 모든 앱 리스트 가져오기(내장/외장)
//val mApps: List<ApplicationInfo> = pkgMgr.getInstalledApplications(0)
// 디바이스에 설치된 모든 패키지에 대한 PackageInfo 추출
val mApps: List<PackageInfo> = pkgMgr.getInstalledPackages(0)
try {
for (i in mApps.indices) {
Utils.Log("mApp -> ${mApps[i].packageName}")
if (mApps[i].packageName.startsWith("패키지명")) {
isExist = true
break
}
}
} catch (e: java.lang.Exception) {
isExist = false
}
return isExist
}
// 설치 되어있으면 앱 연결
if (getPackageList()){
val intent = packageManager.getLaunchIntentForPackage("패키지명")
intent!!.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
} else {
// 설치 안되어있으면 앱 스토어로 연결
val url = "market://details?id=패키지명"
val i = Intent(Intent.ACTION_VIEW, Uri.parse(url))
startActivity(i)
}
하지만 실행이 안됨 ㅠ
검색해보니 API 30 이상(안드로이드 11)을 타겟할 때 외부 앱 실행시에는 Manifest 에 queries 에 패키지를 추가 해줘야한다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="내패키지명"
...
<!-- SDKVersion 30 이상은 외부앱 실행 시 권한 추가 필요-->
<queries>
<package android:name="실행패키지명"/>
</queries>
...
<application
...
>
...
</application>