투케이2K

46. (AndroidStudio/android/java) 앱이 설치되어있으면 실행, 아니면 마켓이동 실시 메소드 본문

Android

46. (AndroidStudio/android/java) 앱이 설치되어있으면 실행, 아니면 마켓이동 실시 메소드

투케이2K 2021. 2. 5. 07:44

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

[ 개발 환경 설정 ]

개발 툴 : AndroidStudio

개발 언어 : java

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

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

[소스 코드]

 

//========== [앱이 설치되어있으면 실행, 아니면 마켓이동 실시 메소드] ==========
public void goAppRun(String packageNames){
	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) 설치되지 않은 경우 앱 설치 진행 / 설치된 경우 url schema 로 외부앱 실행 실시 (액티비티 즉시 이동)
		* 3) 외부앱과 패키지명이 반드시 달라야한다.
		*/
		//TODO ===== 메인으로 인텐트 이동 =====
		try {
			Intent intent = getPackageManager().getLaunchIntentForPackage(packageNames); //메인으로 그냥 이동
			intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
			startActivity(intent);
			overridePendingTransition(0,0);
		}
		catch (Exception e){
			e.printStackTrace();
			String alertTitle = "외부 앱 설치 여부 확인";
			String buttonMessage = "외부 앱이 설치된것을 다시 확인해 주시기 바랍니다.";
			String buttonNo = "";
			String buttonYes = "확인";
			new AlertDialog.Builder(A_Main.this)
					.setTitle(alertTitle)
					.setIcon(R.drawable.ic_launcher)
					.setMessage(buttonMessage)
					.setCancelable(false)
					.setPositiveButton(buttonYes, new DialogInterface.OnClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int which) {
							// TODO Auto-generated method stub
							try {
								//구글 플레이스토어 앱에서 이동한다.
								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){
								//구글 플레이스토어 앱이 없을 경우 홈페이지에서 이동한다.
								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();
							}
						}
					})
					.setNegativeButton(buttonNo, new DialogInterface.OnClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int which) {
							// TODO Auto-generated method stub
						}
					})
					.show();
		}
	}
	else{ //TODO 설치되어있지 않으면
		try {
			//구글 플레이스토어 앱에서 이동한다.
			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){
			//구글 플레이스토어 앱이 없을 경우 홈페이지에서 이동한다.
			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