투케이2K

8. (TWOK/UTIL) [Android/Java] C_MoveApp - 외부 앱 실행 , 스키마 실행 , 앱 설치 여부 , 마켓 이동 , 크롬 기반 외부 링크 이동 본문

투케이2K 유틸파일

8. (TWOK/UTIL) [Android/Java] C_MoveApp - 외부 앱 실행 , 스키마 실행 , 앱 설치 여부 , 마켓 이동 , 크롬 기반 외부 링크 이동

투케이2K 2022. 3. 20. 21:50

[설 명]

프로그램 : Android / Java

설 명 : 외부 앱 실행 , 스키마 실행 , 앱 설치 여부 , 마켓 이동 , 크롬 기반 외부 링크 이동

 

[소스 코드]

 

package com.example.testapp;

import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.util.Log;

import java.util.List;

public class C_MoveApp {


    /**
     * TODO [클래스 설명]
     * // -----------------------------------------
     * 1. 외부 링크 및 외부 앱 이동 클래스
     * 2. 외부 앱 실행 , 스키마 실행 , 앱 설치 여부 , 마켓 이동 , 크롬 기반 외부 링크 이동
     * // -----------------------------------------
     * */





    // TODO [외부 앱이 설치되어 있으면 메인 실행, 아니면 마켓이동 실시 메소드]
    public static void goAppRunLaunch(Context mContext, final String packageNames){

        /**
         * // -----------------------------------------
         * [goAppRunLaunch 메소드 설명]
         * // -----------------------------------------
         * 1. getLaunchIntentForPackage 사용해 외부앱 설치 여부 확인 및 외부앱 실행 실시
         * // -----------------------------------------
         * 2. 호출 방법 : C_MoveApp.goAppRunLaunch(A_Main.this, "com.test.app");
         * // -----------------------------------------
         * 3. 로 직 : 외부앱이 설치되지 않은 경우 앱 설치 진행 / 설치된 경우 외부앱 실행 실시
         * // -----------------------------------------
         * */

        // [사전 패키지명이 널인지 체크 실시]
        if (packageNames != null && packageNames.length()>0
                && !packageNames.trim().equals("") && !packageNames.trim().equals("null")){
        }
        else { // [패키지 명이 널인 경우]
            Log.i("---","---");
            Log.e("//===========//","================================================");
            Log.i("","\n"+"[C_MoveApp >> goAppRunLaunch() :: 외부 앱 실행 및 마켓 이동 실시 [외부 열기 실패]]");
            Log.i("","\n"+"[error :: "+"패키지명 null 널 임"+"]");
            Log.i("","\n"+"[packageNames :: "+String.valueOf(packageNames)+"]");
            Log.e("//===========//","================================================");
            Log.i("---","---");
            return;
        }

        // [외부앱이 설치되었는지 확인]
        try {
            // [특정 패키지 명이 앱에 설치 되어 있는지 확인]
            Intent existPackage = mContext.getPackageManager().getLaunchIntentForPackage(packageNames);
            if (existPackage != null) { // [설치되어 있는 경우]
                Log.i("---","---");
                Log.w("//===========//","================================================");
                Log.i("","\n"+"[C_MoveApp >> goAppRunLaunch() :: 외부 앱 실행 및 마켓 이동 실시 [외부 열기]]");
                Log.i("","\n"+"[찾을려는 앱 :: "+String.valueOf(packageNames)+"]");
                Log.i("","\n"+"[상태 :: "+"외부 앱 설치 됨"+"]");
                Log.w("//===========//","================================================");
                Log.i("---","---");

                // [인텐트 이동]
                Intent intent = mContext.getPackageManager().getLaunchIntentForPackage(packageNames);
                intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                mContext.startActivity(intent);
            }
            else { // [설치되지 않은 경우]
                Log.i("---","---");
                Log.e("//===========//","================================================");
                Log.i("","\n"+"[C_MoveApp >> goAppRunLaunch() :: 외부 앱 실행 및 마켓 이동 실시 [외부 열기]]");
                Log.i("","\n"+"[찾을려는 앱 :: "+String.valueOf(packageNames)+"]");
                Log.i("","\n"+"[상태 :: "+"외부 앱 설치 안됨"+"]");
                Log.e("//===========//","================================================");
                Log.i("---","---");

                // [구글 플레이스토어 이동]
                Intent marketLaunch = new Intent(Intent.ACTION_VIEW);
                marketLaunch.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                marketLaunch.setData(Uri.parse("market://details?id="+packageNames));
                mContext.startActivity(marketLaunch);
            }
        }
        catch (ActivityNotFoundException e) {
            // [이동할 패키지 명을 찾이 못한 경우]
            Log.i("---","---");
            Log.e("//===========//","================================================");
            Log.i("","\n"+"[C_MoveApp >> goAppRunLaunch() :: 외부 앱 실행 및 마켓 이동 실시 [외부 열기 실패]]");
            Log.i("","\n"+"[찾을려는 앱 :: "+String.valueOf(packageNames)+"]");
            Log.i("","\n"+"[로 직 :: 구플 플레이스토어 마켓 이동 수행 실시]");
            Log.i("","\n"+"[ActivityNotFoundException :: "+String.valueOf(e.getMessage())+"]");
            Log.e("//===========//","================================================");
            Log.i("---","---");

            // [구글 플레이스토어 이동]
            Intent marketLaunch = new Intent(Intent.ACTION_VIEW);
            marketLaunch.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
            marketLaunch.setData(Uri.parse("market://details?id="+packageNames));
            mContext.startActivity(marketLaunch);
        }
        catch (Exception e){
            Log.i("---","---");
            Log.e("//===========//","================================================");
            Log.i("","\n"+"[C_MoveApp >> goAppRunLaunch() :: 외부 앱 실행 및 마켓 이동 실시 [외부 열기 에러]]");
            Log.i("","\n"+"[찾을려는 앱 :: "+String.valueOf(packageNames)+"]");
            Log.i("","\n"+"[Exception :: "+String.valueOf(e.getMessage())+"]");
            Log.e("//===========//","================================================");
            Log.i("---","---");
        }
    }





    // TODO [외부 앱이 설치되어 있으면 메인 실행, 아니면 마켓이동 실시 메소드]
    public static void goAppRunQueries(Context mContext, final String packageNames){

        /**
         * // -----------------------------------------
         * [goAppRunQueries 메소드 설명]
         * // -----------------------------------------
         * 1. AndroidManifest.xml 에 패키지 명을 등록 후 외부앱 설치 여부 확인 및 외부앱 실행 실시
         * // -----------------------------------------
         * 2. 호출 방법 : C_MoveApp.goAppRunQueries(A_Main.this, "com.test.app");
         * // -----------------------------------------
         * 3. 로 직 : 외부앱이 설치되지 않은 경우 앱 설치 진행 / 설치된 경우 외부앱 실행 실시
         * // -----------------------------------------
         * 4. 필수 AndroidManifest.xml 등록 사항 : [패키지 명 등록 필요]
         *   <queries>
         *           <package android:name="com.android.chrome" />
         *   </queries>
         * // -----------------------------------------
         * */

        // [사전 패키지명이 널인지 체크 실시]
        if (packageNames != null && packageNames.length()>0
                && !packageNames.trim().equals("") && !packageNames.trim().equals("null")){
        }
        else { // [패키지 명이 널인 경우]
            Log.i("---","---");
            Log.e("//===========//","================================================");
            Log.i("","\n"+"[C_MoveApp >> goAppRunQueries() :: 외부 앱 실행 및 마켓 이동 실시 [외부 열기 실패]]");
            Log.i("","\n"+"[error :: "+"패키지명 null 널 임"+"]");
            Log.i("","\n"+"[packageNames :: "+String.valueOf(packageNames)+"]");
            Log.e("//===========//","================================================");
            Log.i("---","---");
            return;
        }

        // [외부앱이 설치되었는지 확인]
        boolean isExist = false;
        PackageManager packageManager = mContext.getPackageManager();
        List<ResolveInfo> mApps;
        Intent mIntent = new Intent(Intent.ACTION_MAIN, null);
        mIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        mApps = packageManager.queryIntentActivities(mIntent, 0);
        try {
            Log.i("---","---");
            Log.d("//===========//","================================================");
            Log.i("","\n"+"[C_MoveApp >> goAppRunQueries() :: 외부 앱 실행 및 마켓 이동 실시 [외부 열기]]");
            Log.i("","\n"+"[찾을려는 앱 :: "+String.valueOf(packageNames)+"]");
            Log.i("","\n"+"[설치된 앱 :: "+String.valueOf(mApps.toString())+"]");
            Log.d("//===========//","================================================");
            Log.i("---","---");
            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){ // [외부 앱이 설치 된 경우]

            // [메인으로 인텐트 이동]
            try {
                Log.i("---","---");
                Log.w("//===========//","================================================");
                Log.i("","\n"+"[C_MoveApp >> goAppRunQueries() :: 외부 앱 실행 및 마켓 이동 실시 [외부 열기]]");
                Log.i("","\n"+"[찾을려는 앱 :: "+String.valueOf(packageNames)+"]");
                Log.i("","\n"+"[상태 :: "+"외부 앱 설치 됨"+"]");
                Log.w("//===========//","================================================");
                Log.i("---","---");

                // [인텐트 이동]
                Intent intent = mContext.getPackageManager().getLaunchIntentForPackage(packageNames);
                intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                mContext.startActivity(intent);
            }
            catch (Exception e){
                //e.printStackTrace();
            }
        }
        else{ // [외부 앱이 설치되어있지 않은 경우]
            Log.i("---","---");
            Log.e("//===========//","================================================");
            Log.i("","\n"+"[C_MoveApp >> goAppRunQueries() :: 외부 앱 실행 및 마켓 이동 실시 [외부 열기]]");
            Log.i("","\n"+"[찾을려는 앱 :: "+String.valueOf(packageNames)+"]");
            Log.i("","\n"+"[상태 :: "+"외부 앱 설치 안됨"+"]");
            Log.e("//===========//","================================================");
            Log.i("---","---");
            try {
                // [구글 플레이스토어 앱에서 이동한다]
                Intent marketLaunch = new Intent(Intent.ACTION_VIEW);
                marketLaunch.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                marketLaunch.setData(Uri.parse("market://details?id="+packageNames));
                mContext.startActivity(marketLaunch);
            }
            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));
                mContext.startActivity(marketLaunch);
                //e.printStackTrace();
            }
        }
    }





    // TODO [외부 앱이 설치되어 있으면 스키마 실행, 아니면 마켓이동 실시 메소드]
    public static void goAppSchemeMoveLaunch(Context mContext, final String packageNames, final String scheme){

        /**
         * // -----------------------------------------
         * [goAppSchemeMoveLaunch 메소드 설명]
         * // -----------------------------------------
         * 1. getLaunchIntentForPackage 사용해 외부앱 설치 여부 확인 및 스키마 이동 수행 실시
         * // -----------------------------------------
         * 2. 호출 방법 : C_MoveApp.goAppSchemeMoveLaunch(A_Main.this, "com.test.app", "test://call?name=twok&age=29");
         * // -----------------------------------------
         * 3. 로 직 : 외부앱이 설치되지 않은 경우 앱 설치 진행 / 설치된 경우 스키마 앱 실행 실시
         * // -----------------------------------------
         * */

        // [사전 패키지명이 널인지 체크 실시]
        if (packageNames != null && packageNames.length()>0
                && !packageNames.trim().equals("") && !packageNames.trim().equals("null")){
        }
        else { // [패키지 명이 널인 경우]
            Log.i("---","---");
            Log.e("//===========//","================================================");
            Log.i("","\n"+"[C_MoveApp >> goAppSchemeMoveLaunch() :: 외부 앱 스키마 실행 및 마켓 이동 실시 [외부 스키마 열기 실패]]");
            Log.i("","\n"+"[error :: "+"패키지명 null 널 임"+"]");
            Log.i("","\n"+"[packageNames :: "+String.valueOf(packageNames)+"]");
            Log.i("","\n"+"[scheme :: "+String.valueOf(scheme)+"]");
            Log.e("//===========//","================================================");
            Log.i("---","---");
            return;
        }

        // [사전 스키마 명이 널인 체크 실시]
        if (scheme != null && scheme.length()>0
                && !scheme.trim().equals("") && !scheme.trim().equals("null")){
        }
        else { // [패키지 명이 널인 경우]
            Log.i("---","---");
            Log.e("//===========//","================================================");
            Log.i("","\n"+"[C_MoveApp >> goAppSchemeMoveLaunch() :: 외부 앱 스키마 실행 및 마켓 이동 실시 [외부 스키마 열기 실패]]");
            Log.i("","\n"+"[error :: "+"스키마 null 널 임"+"]");
            Log.i("","\n"+"[packageNames :: "+String.valueOf(packageNames)+"]");
            Log.i("","\n"+"[scheme :: "+String.valueOf(scheme)+"]");
            Log.e("//===========//","================================================");
            Log.i("---","---");
            return;
        }

        // [외부앱이 설치되었는지 확인]
        try {
            // [특정 패키지 명이 앱에 설치 되어 있는지 확인]
            Intent existPackage = mContext.getPackageManager().getLaunchIntentForPackage(packageNames);
            if (existPackage != null) { // [설치되어 있는 경우]
                Log.i("---","---");
                Log.w("//===========//","================================================");
                Log.i("","\n"+"[C_MoveApp >> goAppSchemeMoveLaunch() :: 외부 앱 스키마 실행 및 마켓 이동 실시 [외부 스키마 열기]]");
                Log.i("","\n"+"[찾을려는 앱 :: "+String.valueOf(packageNames)+"]");
                Log.i("","\n"+"[스키마 데이터 :: "+String.valueOf(scheme)+"]");
                Log.i("","\n"+"[상태 :: "+"외부 앱 설치 됨"+"]");
                Log.w("//===========//","================================================");
                Log.i("---","---");

                // [형식] : testScheme://testHost?name=kwon&idno=1234
                String url = String.valueOf(scheme);
                Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(url));
                intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                mContext.startActivity(intent);
            }
            else { // [설치되지 않은 경우]
                Log.i("---","---");
                Log.e("//===========//","================================================");
                Log.i("","\n"+"[C_MoveApp >> goAppSchemeMoveLaunch() :: 외부 앱 스키마 실행 및 마켓 이동 실시 [외부 스키마 열기]]");
                Log.i("","\n"+"[찾을려는 앱 :: "+String.valueOf(packageNames)+"]");
                Log.i("","\n"+"[스키마 데이터 :: "+String.valueOf(scheme)+"]");
                Log.i("","\n"+"[상태 :: "+"외부 앱 설치 안됨"+"]");
                Log.e("//===========//","================================================");
                Log.i("---","---");

                // [구글 플레이스토어 이동]
                Intent marketLaunch = new Intent(Intent.ACTION_VIEW);
                marketLaunch.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                marketLaunch.setData(Uri.parse("market://details?id="+packageNames));
                mContext.startActivity(marketLaunch);
            }
        }
        catch (ActivityNotFoundException e) {
            // [이동할 패키지 명을 찾이 못한 경우]
            Log.i("---","---");
            Log.e("//===========//","================================================");
            Log.i("","\n"+"[C_MoveApp >> goAppSchemeMoveLaunch() :: 외부 앱 스키마 실행 및 마켓 이동 실시 [외부 스키마 열기 실패]]");
            Log.i("","\n"+"[찾을려는 앱 :: "+String.valueOf(packageNames)+"]");
            Log.i("","\n"+"[스키마 데이터 :: "+String.valueOf(scheme)+"]");
            Log.i("","\n"+"[로 직 :: 구플 플레이스토어 마켓 이동 수행 실시]");
            Log.i("","\n"+"[ActivityNotFoundException :: "+String.valueOf(e.getMessage())+"]");
            Log.e("//===========//","================================================");
            Log.i("---","---");

            // [구글 플레이스토어 이동]
            Intent marketLaunch = new Intent(Intent.ACTION_VIEW);
            marketLaunch.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
            marketLaunch.setData(Uri.parse("market://details?id="+packageNames));
            mContext.startActivity(marketLaunch);
        }
        catch (Exception e){
            Log.i("---","---");
            Log.e("//===========//","================================================");
            Log.i("","\n"+"[C_MoveApp >> goAppSchemeMoveLaunch() :: 외부 앱 스키마 실행 및 마켓 이동 실시 [외부 스키마 열기 에러]]");
            Log.i("","\n"+"[찾을려는 앱 :: "+String.valueOf(packageNames)+"]");
            Log.i("","\n"+"[스키마 데이터 :: "+String.valueOf(scheme)+"]");
            Log.i("","\n"+"[Exception :: "+String.valueOf(e.getMessage())+"]");
            Log.e("//===========//","================================================");
            Log.i("---","---");
        }
    }





    // TODO [외부 앱이 설치되어 있으면 스키마 실행, 아니면 마켓이동 실시 메소드]
    public static void goAppSchemeMoveQueries(Context mContext, final String packageNames, final String scheme){

        /**
         * // -----------------------------------------
         * [goAppSchemeMoveQueries 메소드 설명]
         * // -----------------------------------------
         * 1. AndroidManifest.xml 에 패키지 명을 등록 후 외부앱 설치 여부 확인 및 외부앱 실행 실시
         * // -----------------------------------------
         * 2. 호출 방법 : C_MoveApp.goAppSchemeMoveQueries(A_Main.this, "com.test.app", "test://call?name=twok&age=29");
         * // -----------------------------------------
         * 3. 로 직 : 외부앱이 설치되지 않은 경우 앱 설치 진행 / 설치된 경우 스키마 앱 실행 실시
         * // -----------------------------------------
         * 4. 필수 AndroidManifest.xml 등록 사항 : [패키지 명 등록 필요]
         *   <queries>
         *           <package android:name="com.android.chrome" />
         *   </queries>
         * // -----------------------------------------
         * */

        // [사전 패키지명이 널인지 체크 실시]
        if (packageNames != null && packageNames.length()>0
                && !packageNames.trim().equals("") && !packageNames.trim().equals("null")){
        }
        else { // [패키지 명이 널인 경우]
            Log.i("---","---");
            Log.e("//===========//","================================================");
            Log.i("","\n"+"[C_MoveApp >> goAppSchemeMoveQueries() :: 외부 앱 스키마 실행 및 마켓 이동 실시 [외부 스키마 열기 실패]]");
            Log.i("","\n"+"[error :: "+"패키지명 null 널 임"+"]");
            Log.i("","\n"+"[packageNames :: "+String.valueOf(packageNames)+"]");
            Log.i("","\n"+"[scheme :: "+String.valueOf(scheme)+"]");
            Log.e("//===========//","================================================");
            Log.i("---","---");
            return;
        }

        // [사전 스키마 명이 널인 체크 실시]
        if (scheme != null && scheme.length()>0
                && !scheme.trim().equals("") && !scheme.trim().equals("null")){
        }
        else { // [패키지 명이 널인 경우]
            Log.i("---","---");
            Log.e("//===========//","================================================");
            Log.i("","\n"+"[C_MoveApp >> goAppSchemeMoveQueries() :: 외부 앱 스키마 실행 및 마켓 이동 실시 [외부 스키마 열기 실패]]");
            Log.i("","\n"+"[error :: "+"스키마 null 널 임"+"]");
            Log.i("","\n"+"[packageNames :: "+String.valueOf(packageNames)+"]");
            Log.i("","\n"+"[scheme :: "+String.valueOf(scheme)+"]");
            Log.e("//===========//","================================================");
            Log.i("---","---");
            return;
        }

        // [외부앱이 설치되었는지 확인]
        boolean isExist = false;
        PackageManager packageManager = mContext.getPackageManager();
        List<ResolveInfo> mApps;
        Intent mIntent = new Intent(Intent.ACTION_MAIN, null);
        mIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        mApps = packageManager.queryIntentActivities(mIntent, 0);
        try {
            Log.i("---","---");
            Log.d("//===========//","================================================");
            Log.i("","\n"+"[C_MoveApp >> goAppSchemeMoveQueries() :: 외부 앱 스키마 실행 및 마켓 이동 실시 [외부 스키마 열기]]");
            Log.i("","\n"+"[찾을려는 앱 :: "+String.valueOf(packageNames)+"]");
            Log.i("","\n"+"[스키마 :: "+String.valueOf(scheme)+"]");
            Log.i("","\n"+"[설치된 앱 :: "+String.valueOf(mApps.toString())+"]");
            Log.d("//===========//","================================================");
            Log.i("---","---");
            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){ // [외부 앱이 설치 된 경우]

            // [스키마 인텐트 이동]
            try {
                Log.i("---","---");
                Log.w("//===========//","================================================");
                Log.i("","\n"+"[C_MoveApp >> goAppSchemeMoveQueries() :: 외부 앱 스키마 실행 및 마켓 이동 실시 [외부 스키마 열기]]");
                Log.i("","\n"+"[찾을려는 앱 :: "+String.valueOf(packageNames)+"]");
                Log.i("","\n"+"[스키마 :: "+String.valueOf(scheme)+"]");
                Log.i("","\n"+"[상태 :: "+"외부 앱 설치 됨"+"]");
                Log.w("//===========//","================================================");
                Log.i("---","---");

                // [형식] : testScheme://testHost?name=kwon&idno=1234
                String url = String.valueOf(scheme);
                Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(url));
                intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                mContext.startActivity(intent);
            }
            catch (Exception e){
                //e.printStackTrace();
            }
        }
        else{ // [외부 앱이 설치되어있지 않은 경우]
            Log.i("---","---");
            Log.e("//===========//","================================================");
            Log.i("","\n"+"[C_MoveApp >> goAppSchemeMoveQueries() :: 외부 앱 스키마 실행 및 마켓 이동 실시 [외부 스키마 열기 실패]]");
            Log.i("","\n"+"[찾을려는 앱 :: "+String.valueOf(packageNames)+"]");
            Log.i("","\n"+"[스키마 :: "+String.valueOf(scheme)+"]");
            Log.i("","\n"+"[상태 :: "+"외부 앱 설치 안됨"+"]");
            Log.e("//===========//","================================================");
            Log.i("---","---");
            try {
                // [구글 플레이스토어 앱에서 이동한다]
                Intent marketLaunch = new Intent(Intent.ACTION_VIEW);
                marketLaunch.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                marketLaunch.setData(Uri.parse("market://details?id="+packageNames));
                mContext.startActivity(marketLaunch);
            }
            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));
                mContext.startActivity(marketLaunch);
                //e.printStackTrace();
            }
        }
    }





    // TODO [외부 앱이 설치 여부 판단 실시 메소드]
    public static String checkInstallApp(Context mContext, final String packageNames){

        /**
         * // -----------------------------------------
         * [checkInstallApp 메소드 설명]
         * // -----------------------------------------
         * 1. getLaunchIntentForPackage 사용해 외부앱 설치 여부 확인 실시
         * // -----------------------------------------
         * 2. 호출 방법 : C_MoveApp.checkInstallApp(A_Main.this, "com.test.app");
         * // -----------------------------------------
         * 3. 로 직 : 외부앱이 설치되지 않은 경우 [N] 값 리턴 / 설치된 경우 [Y] 값 리턴
         * // -----------------------------------------
         * */

        // [리턴 결과 반환 변수]
        String returnData = "N";

        // [사전 패키지명이 널인지 체크 실시]
        if (packageNames != null && packageNames.length()>0
                && !packageNames.trim().equals("") && !packageNames.trim().equals("null")){
        }
        else { // [패키지 명이 널인 경우]
            Log.i("---","---");
            Log.e("//===========//","================================================");
            Log.i("","\n"+"[C_MoveApp >> checkInstallApp() :: 외부 앱 설치 여부 확인 실시 [설치 확인 실패]]");
            Log.i("","\n"+"[error :: "+"패키지명 null 널 임"+"]");
            Log.i("","\n"+"[packageNames :: "+String.valueOf(packageNames)+"]");
            Log.e("//===========//","================================================");
            Log.i("---","---");
            return returnData;
        }

        // [외부앱이 설치되었는지 확인]
        try {
            // [특정 패키지 명이 앱에 설치 되어 있는지 확인]
            Intent existPackage = mContext.getPackageManager().getLaunchIntentForPackage(packageNames);
            if (existPackage != null) { // 설치되어 있는 경우
                Log.i("---","---");
                Log.w("//===========//","================================================");
                Log.i("","\n"+"[C_MoveApp >> checkInstallApp() :: 외부 앱 설치 여부 확인 실시 [설치 된 상태]]");
                Log.i("","\n"+"[찾을려는 앱 :: "+String.valueOf(packageNames)+"]");
                Log.i("","\n"+"[상태 :: "+"외부 앱 설치 됨"+"]");
                Log.w("//===========//","================================================");
                Log.i("---","---");

                returnData = "Y";
            }
            else { // 설치되지 않은 경우
                Log.i("---","---");
                Log.e("//===========//","================================================");
                Log.i("","\n"+"[C_MoveApp >> checkInstallApp() :: 외부 앱 설치 여부 확인 실시 [설치 안된 상태]]");
                Log.i("","\n"+"[찾을려는 앱 :: "+String.valueOf(packageNames)+"]");
                Log.i("","\n"+"[상태 :: "+"외부 앱 설치 안됨"+"]");
                Log.e("//===========//","================================================");
                Log.i("---","---");

                returnData = "N";
            }
        }
        catch (ActivityNotFoundException e) {
            // [이동할 패키지 명을 찾이 못한 경우]
            Log.i("---","---");
            Log.e("//===========//","================================================");
            Log.i("","\n"+"[C_MoveApp >> checkInstallApp() :: 외부 앱 설치 여부 확인 실시 [설치 안된 상태]]");
            Log.i("","\n"+"[찾을려는 앱 :: "+packageNames+"]");
            Log.i("","\n"+"[ActivityNotFoundException :: "+String.valueOf(e.getMessage())+"]");
            Log.e("//===========//","================================================");
            Log.i("---","---");

            returnData = "N";
        }
        catch (Exception e){
            Log.i("---","---");
            Log.e("//===========//","================================================");
            Log.i("","\n"+"[C_MoveApp >> checkInstallApp() :: 외부 앱 설치 여부 확인 실시 [설치 안된 상태]]");
            Log.i("","\n"+"[찾을려는 앱 :: "+String.valueOf(packageNames)+"]");
            Log.i("","\n"+"[Exception :: "+String.valueOf(e.getMessage())+"]");
            Log.e("//===========//","================================================");
            Log.i("---","---");

            returnData = "N";
        }

        return returnData;
    }





    // TODO [크롬 브라우저 사용해 외부 링크 이동 실시]
    public static void goChromeBrowser(Context mContext, String url){

        /**
         * // -----------------------------------------
         * [goChromeBrowser 메소드 설명]
         * // -----------------------------------------
         * 1. getLaunchIntentForPackage 사용해 크롬 앱 설치 여부 확인 및 외부 링크 이동 실시
         * // -----------------------------------------
         * 2. 호출 방법 : C_MoveApp.goChromeBrowser(A_Main.this, "https://www.naver.com");
         * // -----------------------------------------
         * 3. 로 직 : 크롬 앱이 설치된 경우 크롬 브라우저 실행 / 크롬 브라우저가 설치되지 않은 경우 일반 브라우저 실행
         * // -----------------------------------------
         * */

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

        // [사전 주소가 널인지 체크 실시]
        if (url != null && url.length()>0
                && !url.trim().equals("") && !url.trim().equals("null")
                && url.startsWith("http") == true){
        }
        else { // [주소가 널인 경우]
            Log.i("---","---");
            Log.e("//===========//","================================================");
            Log.i("","\n"+"[C_MoveApp >> goChromeBrowser() :: 크롬 브라우저 사용해 외부 링크 이동 실시 [크롬 설치 확인 실패]]");
            Log.i("","\n"+"[error :: "+"주소 null 널 임"+"]");
            Log.i("","\n"+"[url :: "+String.valueOf(url)+"]");
            Log.e("//===========//","================================================");
            Log.i("---","---");
            return;
        }
        
        // [URL 형식으로 파싱 가능한지 확인 실시]
        try {
            URL tempUrl  = new URL(url);
        }
        catch (Exception e){
            // e.printStackTrace();
            Log.i("---","---");
            Log.e("//===========//","================================================");
            Log.i("","\n"+"[C_MoveApp >> goChromeBrowser() :: 크롬 브라우저 외부 링크 이동 실패]");
            Log.i("","\n"+"[error :: "+"URL 주소 형식 아님 >> 인코딩 , 이스케이프 문자 체크 필요"+"]");
            Log.e("//===========//","================================================");
            Log.i("---","---");

            // [종료 실시]
            return;
        }

        // [URL 주소 공백 제거 실시]
        String urlParse = String.valueOf(url);
        urlParse = urlParse.trim();
        urlParse = urlParse.replaceAll(" ","");

        // [url 주소 삽입]
        final String urlData = urlParse;

        // [외부앱이 설치되었는지 확인]
        try {
            // [특정 패키지 명이 앱에 설치 되어 있는지 확인]
            Intent existPackage = mContext.getPackageManager().getLaunchIntentForPackage(packageNames);
            if (existPackage != null) { // [설치되어 있는 경우]
                Log.i("---","---");
                Log.w("//===========//","================================================");
                Log.i("","\n"+"[C_MoveApp >> goChromeBrowser() :: 크롬 브라우저 사용해 외부 링크 이동 실시 [크롬 설치 확인]]");
                Log.i("","\n"+"[찾을려는 앱 :: "+String.valueOf(packageNames)+"]");
                Log.i("","\n"+"[상태 :: "+"외부 앱 설치 됨"+"]");
                Log.w("//===========//","================================================");
                Log.i("---","---");

                // [크롬 브라우저를 통해 외부 링크 호출]
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                intent.setPackage(packageNames); // [크롬 브라우저 지정]
                intent.setData(Uri.parse(urlData));
                mContext.startActivity(intent);
            }
            else { // [설치되지 않은 경우]
                Log.i("---","---");
                Log.e("//===========//","================================================");
                Log.i("","\n"+"[C_MoveApp >> goChromeBrowser() :: 크롬 브라우저 사용해 외부 링크 이동 실시 [크롬 설치 확인 실패]]");
                Log.i("","\n"+"[찾을려는 앱 :: "+String.valueOf(packageNames)+"]");
                Log.i("","\n"+"[주 소 :: "+String.valueOf(urlData)+"]");
                Log.i("","\n"+"[로 직 :: "+"크롬 브라우저 사용해 외부 링크 이동 실시"+"]");
                Log.e("//===========//","================================================");
                Log.i("---","---");

                // [일반 기본 설정된 브라우저로 이동]
                goNormalBrowser(mContext, urlData);
            }
        }
        catch (ActivityNotFoundException e) {
            // TODO [이동할 패키지 명을 찾이 못한 경우]
            Log.i("---","---");
            Log.e("//===========//","================================================");
            Log.i("","\n"+"[C_MoveApp >> goChromeBrowser() :: 크롬 브라우저 사용해 외부 링크 이동 실시 [크롬 설치 확인 실패]]");
            Log.i("","\n"+"[찾을려는 앱 :: "+String.valueOf(packageNames)+"]");
            Log.i("","\n"+"[주 소 :: "+String.valueOf(urlData)+"]");
            Log.i("","\n"+"[로 직 :: "+"일반 브라우저 사용해 외부 링크 이동 실시"+"]");
            Log.i("","\n"+"[ActivityNotFoundException :: "+String.valueOf(e.getMessage())+"]");
            Log.e("//===========//","================================================");
            Log.i("---","---");

            // [일반 기본 설정된 브라우저로 이동]
            goNormalBrowser(mContext, urlData);
        }
        catch (Exception e){
            Log.i("---","---");
            Log.e("//===========//","================================================");
            Log.i("","\n"+"[C_MoveApp >> goChromeBrowser() :: 크롬 브라우저 사용해 외부 링크 이동 실시 [크롬 설치 확인 실패]]");
            Log.i("","\n"+"[찾을려는 앱 :: "+String.valueOf(packageNames)+"]");
            Log.i("","\n"+"[주 소 :: "+String.valueOf(urlData)+"]");
            Log.i("","\n"+"[로 직 :: "+"일반 브라우저 사용해 외부 링크 이동 실시"+"]");
            Log.i("","\n"+"[Exception :: "+String.valueOf(e.getMessage())+"]");
            Log.e("//===========//","================================================");
            Log.i("---","---");

            // [일반 기본 설정된 브라우저로 이동]
            goNormalBrowser(mContext, urlData);
        }
    }





    // TODO [일반 브라우저 사용해 외부 링크 이동 실시]
    public static void goNormalBrowser(Context mContext, String url){

        /**
         * // -----------------------------------------
         * [goNormalBrowser 메소드 설명]
         * // -----------------------------------------
         * 1. 일반 브라우저 외부 링크 이동 실시
         * // -----------------------------------------
         * 2. 호출 방법 : C_MoveApp.goNormalBrowser(A_Main.this, "https://www.naver.com");
         * // -----------------------------------------
         * */

        try {

            // [사전 주소가 널인지 체크 실시]
            if (url != null && url.length()>0
                    && !url.trim().equals("") && !url.trim().equals("null")
                    && url.startsWith("http") == true){
            }
            else { // [주소가 널인 경우]
                Log.i("---","---");
                Log.e("//===========//","================================================");
                Log.i("","\n"+"[C_MoveApp >> goNormalBrowser() :: 일반 브라우저 사용해 외부 링크 이동 실패]");
                Log.i("","\n"+"[error :: "+"주소 null 널 임"+"]");
                Log.i("","\n"+"[url :: "+String.valueOf(url)+"]");
                Log.e("//===========//","================================================");
                Log.i("---","---");
                return;
            }

            // [URL 주소 공백 제거 실시]
            String urlParse = String.valueOf(url);
            urlParse = urlParse.trim();
            urlParse = urlParse.replaceAll(" ","");

            // [url 주소 삽입]
            final String urlData = urlParse;

            // [로그 출력 실시]
            Log.i("---","---");
            Log.w("//===========//","================================================");
            Log.i("","\n"+"[C_MoveApp >> goNormalBrowser() :: 일반 브라우저 사용해 외부 링크 이동 실시]");
            Log.i("","\n"+"[주소 : "+String.valueOf(urlData)+"]");
            Log.w("//===========//","================================================");
            Log.i("---","---");

            // [일반 브라우저 외부링크 이동 실시]
            Intent go = new Intent(Intent.ACTION_VIEW);
            go.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
            go.setData(Uri.parse(urlData));
            mContext.startActivity(go);
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }





    // TODO [마켓이동 실시 메소드]
    public static void goMarketRun(Context mContext, final String packageNames){

        /**
         * // -----------------------------------------
         * [goMarketRun 메소드 설명]
         * // -----------------------------------------
         * 1. 패키지 명을 사용해 구글 플레이스토어 마켓 이동 실시
         * // -----------------------------------------
         * 2. 호출 방법 : C_MoveApp.goMarketRun(A_Main.this, "com.test.app");
         * // -----------------------------------------
         * */

        // [사전 패키지명이 널인지 체크 실시]
        if (packageNames != null && packageNames.length()>0
                && !packageNames.trim().equals("") && !packageNames.trim().equals("null")){
        }
        else { // [패키지 명이 널인 경우]
            Log.i("---","---");
            Log.e("//===========//","================================================");
            Log.i("","\n"+"[C_MoveApp >> goMarketRun() :: 앱 마켓 이동 실시 [실패]]");
            Log.i("","\n"+"[error :: "+"패키지명 null 널 임"+"]");
            Log.i("","\n"+"[packageNames :: "+String.valueOf(packageNames)+"]");
            Log.e("//===========//","================================================");
            Log.i("---","---");
            return;
        }

        // [마켓 이동 실시]
        try {
            Log.i("---","---");
            Log.w("//===========//","================================================");
            Log.i("","\n"+"[C_MoveApp >> goMarketRun() :: 앱 마켓 이동 실시 [수행]]");
            Log.i("","\n"+"[packageNames :: "+String.valueOf(packageNames)+"]");
            Log.w("//===========//","================================================");
            Log.i("---","---");

            // [구글 플레이스토어 앱에서 이동한다]
            Intent marketLaunch = new Intent(Intent.ACTION_VIEW);
            marketLaunch.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
            marketLaunch.setData(Uri.parse("market://details?id="+packageNames));
            mContext.startActivity(marketLaunch);
        }
        catch (Exception e){
            Log.i("---","---");
            Log.e("//===========//","================================================");
            Log.i("","\n"+"[C_MoveApp >> goMarketRun() :: 앱 마켓 이동 실시 [에러]]");
            Log.i("","\n"+"[packageNames :: "+String.valueOf(packageNames)+"]");
            Log.i("","\n"+"[로 직 :: http 주소로 마켓 이동 실시]");
            Log.e("//===========//","================================================");
            Log.i("---","---");

            // [구글 플레이스토어 앱이 없을 경우 홈페이지에서 이동한다]
            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));
            mContext.startActivity(marketLaunch);
            //e.printStackTrace();
        }
    }


} // TODO [클래스 종료]

반응형
Comments