투케이2K

164. (AndroidStudio/android/java) packageManager 사용해 외부 앱 설치 여부 확인 및 마켓 이동 실시 - 타겟 30 및 안드로이드 11 대응 본문

Android

164. (AndroidStudio/android/java) packageManager 사용해 외부 앱 설치 여부 확인 및 마켓 이동 실시 - 타겟 30 및 안드로이드 11 대응

투케이2K 2021. 5. 26. 17:10

/* =========================== */

[ 개발 환경 설정 ]

개발 툴 : AndroidStudio

개발 언어 : java

/* =========================== */

/* =========================== */

[소스 코드]

 

/** ========== [앱이 설치되어있으면 실행, 아니면 마켓이동 실시 메소드] ========== **/
public void goAppRun(final String packageNames){
	//TODO [안드로이드 OS 11 및 타겟 30 이상 필수 사항]
	/**
	 * [AndroidManifest.xml 파일 > manifest 부분 > 특정 앱 패키지명 등록 필요]
	 * <queries>
	 *         <package android:name="com.android.chrome" />
	 *         <package android:name="kr.co.two2k.manager" />
	 * </queries>
	 * */

	//TODO [외부앱이 설치되었는지 확인]
	boolean isExist = false;
	PackageManager packageManager = getPackageManager();
	List<ResolveInfo> mApps;
	Intent mIntent = new Intent(Intent.ACTION_MAIN, null);
	mIntent.addCategory(Intent.CATEGORY_LAUNCHER);
	mApps = packageManager.queryIntentActivities(mIntent, 0);
	try {
		Log.d("---","---");
		Log.d("//===========//","================================================");
		Log.d("","\n"+"[goAppRun > goAppRun() 메소드 : 앱 실행 및 마켓 이동 실시]");
		Log.d("","\n"+"[찾을려는 앱 : "+packageNames+"]");
		Log.d("","\n"+"[설치된 앱 : "+mApps.toString()+"]");
		Log.d("//===========//","================================================");
		Log.d("---","---");
		for (int i = 0; i < mApps.size(); i++) {
			if(mApps.get(i).activityInfo.packageName.startsWith(packageNames)){
				isExist = true;
				break;
			}
		}
	} catch (Exception e) {
		isExist = false;
	}

	if(isExist == true){ //TODO [외부 앱이 설치 된 경우]
		/**
		 * 1) 구글 플레이스토어에서 앱이 설치된지 확인
		 * 2) 설치되지 않은 경우 앱 설치 진행 / 설치된 경우 외부앱 실행 실시
		 */
		//TODO [메인으로 인텐트 이동]
		try {
			Intent intent = getPackageManager().getLaunchIntentForPackage(packageNames); //메인으로 그냥 이동
			intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
			startActivity(intent);
			overridePendingTransition(0,0);
		}
		catch (Exception e){
			e.printStackTrace();
		}
	}
	else{ //TODO [외부 앱이 설치되어있지 않은 경우]
		try {
			//TODO [구글 플레이스토어 앱에서 이동한다.]
			Intent marketLaunch = new Intent(Intent.ACTION_VIEW);
			marketLaunch.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
			marketLaunch.setData(Uri.parse("market://details?id="+packageNames));
			startActivity(marketLaunch);
			overridePendingTransition(0,0);
		}
		catch (Exception e){
			//TODO [구글 플레이스토어 앱이 없을 경우 홈페이지에서 이동한다.]
			Intent marketLaunch = new Intent(Intent.ACTION_VIEW);
			marketLaunch.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
			marketLaunch.setData(Uri.parse("https://play.google.com/store/apps/details?id="+packageNames));
			startActivity(marketLaunch);
			overridePendingTransition(0,0);
			e.printStackTrace();
		}
	}
}

/* =========================== */

/* =========================== */

[결과 출력]

/* =========================== */

 

반응형
Comments