투케이2K

165. (AndroidStudio/android/java) Intent setPackage 사용해 외부 링크 브라우저 크롬 사용해 로드 - 타겟 30 및 안드로이드 11 대응 본문

Android

165. (AndroidStudio/android/java) Intent setPackage 사용해 외부 링크 브라우저 크롬 사용해 로드 - 타겟 30 및 안드로이드 11 대응

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

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

[ 개발 환경 설정 ]

개발 툴 : AndroidStudio

개발 언어 : java

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

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

[소스 코드]

 

/** ========== [크롬 브라우저 사용해 외부 링크 이동 실시] ========== **/
public void callChromeBrowser(String url){
	//TODO [안드로이드 OS 11 및 타겟 30 이상 필수 사항]
	/**
	 * [AndroidManifest.xml 파일 > manifest 부분 > 특정 앱 패키지명 등록 필요]
	 * <queries>
	 *         <package android:name="com.android.chrome" />
	 *         <package android:name="kr.co.two2k.manager" />
	 * </queries>
	 * */

	//TODO [크롬 브라우저 패키지명]
	final String packageNames = "com.android.chrome";

	//TODO [URL 주소 확인 실시]
	String urlParse = String.valueOf(url);
	if(urlParse.startsWith("https:") || urlParse.startsWith("http:")){
		urlParse = urlParse.trim();
		urlParse = urlParse.replaceAll(" ","");
	}
	else {
		urlParse = "https:" + urlParse;
		urlParse = urlParse.trim();
		urlParse = urlParse.replaceAll(" ","");
	}
	final String urlData = urlParse;

	//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 > callChromeBrowser() 메소드 : 크롬 브라우저 외부 링크 이동 실시]");
		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 [크롬 브라우저가 설치된 경우]
		//TODO [크롬 브라우저를 통해 외부 링크 호출]
		try {
			Log.d("---","---");
			Log.w("//===========//","================================================");
			Log.d("","\n"+"[goAppRun > callChromeBrowser() 메소드 : 크롬 브라우저 외부 링크 이동 실시]");
			Log.d("","\n"+"[상태 : "+"크롬 설치 된 상태"+"]");
			Log.d("","\n"+"[주소 : "+urlData+"]");
			Log.w("//===========//","================================================");
			Log.d("---","---");
			Intent intent = new Intent(Intent.ACTION_VIEW);
			intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
			intent.setPackage(packageNames); //TODO [크롬 브라우저 지정]
			intent.setData(Uri.parse(urlData));
			startActivity(intent);
			overridePendingTransition(0,0);
		}
		catch (Exception e){
			e.printStackTrace();
		}
	}
	else{ //TODO [크롬 브라우저가 설치되지 않은 경우]
		try {
			Log.d("---","---");
			Log.e("//===========//","================================================");
			Log.d("","\n"+"[goAppRun > callChromeBrowser() 메소드 : 크롬 브라우저 외부 링크 이동 실시]");
			Log.d("","\n"+"[상태 : "+"크롬 설치 안된 상태"+"]");
			Log.d("","\n"+"[주소 : "+urlData+"]");
			Log.e("//===========//","================================================");
			Log.d("---","---");
			String Tittle = "[알 림]";
			String Message = "안드로이드는 크롬 브라우저에 최적화되었습니다. 마켓으로 이동해 다운받으시겠습니까?";
			String buttonYes = "마켓이동";
			String buttonNo = "기본 브라우저 이동";
			new AlertDialog.Builder(A_AA_Test_Java.this)
					.setTitle(Tittle)
					//.setIcon(R.drawable.ic_launcher)
					.setMessage(Message)
					//.setCancelable(false)
					.setPositiveButton(buttonYes, new DialogInterface.OnClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int which) {
							// TODO Auto-generated method stub
							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();
							}
						}
					})
					.setNegativeButton(buttonNo, new DialogInterface.OnClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int which) {
							// TODO Auto-generated method stub
							//TODO [일반 기본 설정된 브라우저로 이동]
							Intent go = new Intent(Intent.ACTION_VIEW);
							go.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
							go.setData(Uri.parse(urlData));
							startActivity(go);
							overridePendingTransition(0,0);
						}
					})
					.show();
		}
		catch (Exception e){
			e.printStackTrace();
		}
	}
}

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

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

[결과 출력]

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

 

반응형
Comments