투케이2K

93. (TWOK/LOGIC) [android] 안드로이드 외부 링크 연동 시 크롬 및 삼성 브라우저 지정 URL 주소 링크 열기 본문

투케이2K 로직정리

93. (TWOK/LOGIC) [android] 안드로이드 외부 링크 연동 시 크롬 및 삼성 브라우저 지정 URL 주소 링크 열기

투케이2K 2024. 10. 18. 18:44

[로직 정리]

정리 로직 : Android / 안드로이드

상태 : [android] 안드로이드 외부 링크 연동 시 크롬 및 삼성 브라우저 지정 URL 주소 링크 열기

 

[설 명]

 


// --------------------------------------------------------------------------------------
[사전) 설정 및 정보 확인 사항]
// --------------------------------------------------------------------------------------

- AndroidManifest.xml 파일에서 App To App 이동을 위한 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="com.example.javaproject">


    <!-- ============================================================= -->
    <!-- [외부앱 설치 확인 및 외부앱 열기 패키지 선언 부분] -->
    <!-- ============================================================= -->
    <queries>

        <!-- [기본 크롬] -->
        <package android:name="com.android.chrome" />

        <!-- [삼성 브라우저] -->
        <package android:name="com.sec.android.app.sbrowser" />

    </queries>





    <!-- ============================================================= -->
    <!-- [애플리케이션 설정] -->
    <!-- ============================================================= -->
    <application
        android:name=".A_Application"
        tools:replace="android:allowBackup">

    </application>

</manifest>

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[로직 설명]
// --------------------------------------------------------------------------------------

1. 안드로이드 외부 링크를 열기 위한 사전 URL 주소 확인 (http, https 로 시작 체크 및 URL 형식 체크)


2. 외부 링크로 URL 주소를 열기 위해 사전) 크롬 및 삼성 브라우저 애플리케이션이 설치 된 상태 확인하기

    // [크롬 : com.android.chrome / 삼성 브라우저 : com.sec.android.app.sbrowser]
    Intent existPackage = mContext.getPackageManager().getLaunchIntentForPackage(packageNames);

    if (existPackage != null) { // [설치되어 있는 경우]
        S_Log._W_("C_MoveApp >> goBrowser() :: 외부 링크 이동 실시", new String[]{
                "찾을려는 앱 :: " + String.valueOf(packageNames),
                "url :: " + String.valueOf(urlData),
                "상태 :: 외부 앱 설치 됨"
        });

    }
    else { // [설치되지 않은 경우]
        S_Log._E_("C_MoveApp >> goBrowser() :: 외부 링크 이동 실패", new String[]{
                "찾을려는 앱 :: " + String.valueOf(packageNames),
                "url :: " + String.valueOf(urlData),
                "로직 :: 일반 브라우저 사용해 외부 링크 이동 실시"
        });
    }


3. 정상적으로 크롬 및 삼성 브라우저가 설치 된 경우 intent.setPackage(packageNames); 패키지 명칭 지정해 외부 링크 열기 실시

    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);


4. 크롬 및 삼성 브라우저 설치를 확인할 수 없는 경우는 기본 휴대폰에 설정 된 브라우저로 외부 링크 열기 실시

    Intent go = new Intent(Intent.ACTION_VIEW);
    go.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    go.setData(Uri.parse(urlData));
    mContext.startActivity(go);


5. 참고 : 크롬 및 삼성 브라우저 열기 소스 코드

    // [크롬 및 삼성 브라우저 설치 여부 확인 >> 외부 링크 열기 수행]
    try {
        
        // [크롬 : com.android.chrome / 삼성 브라우저 : com.sec.android.app.sbrowser]
        Intent existPackage = mContext.getPackageManager().getLaunchIntentForPackage(packageNames);

        if (existPackage != null) { // [설치되어 있는 경우]
            S_Log._W_("C_MoveApp >> goBrowser() :: 외부 링크 이동 실시", new String[]{
                    "찾을려는 앱 :: " + String.valueOf(packageNames),
                    "url :: " + String.valueOf(urlData),
                    "상태 :: 외부 앱 설치 됨"
            });

            // [크롬 및 삼성 브라우저를 통해 외부 링크 호출]
            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 { // [설치되지 않은 경우]
            S_Log._E_("C_MoveApp >> goBrowser() :: 외부 링크 이동 실패", new String[]{
                    "찾을려는 앱 :: " + String.valueOf(packageNames),
                    "url :: " + String.valueOf(urlData),
                    "로직 :: 일반 브라우저 사용해 외부 링크 이동 실시"
            });

            // [일반 기본 설정된 브라우저로 이동]
            Intent go = new Intent(Intent.ACTION_VIEW);
            go.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
            go.setData(Uri.parse(urlData));
            mContext.startActivity(go);
        }
    }
    catch (ActivityNotFoundException e) { // TODO [이동할 패키지 명을 찾이 못한 경우]
        S_Log._E_("C_MoveApp >> goBrowser() :: 외부 링크 이동 실패", new String[]{
                "찾을려는 앱 :: " + String.valueOf(packageNames),
                "url :: " + String.valueOf(urlData),
                "로직 :: 일반 브라우저 사용해 외부 링크 이동 실시",
                "ActivityNotFoundException :: " + String.valueOf(e.getMessage())
        });

        // [일반 기본 설정된 브라우저로 이동]
        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){
        S_Log._E_("C_MoveApp >> goBrowser() :: 외부 링크 이동 실패", new String[]{
                "찾을려는 앱 :: " + String.valueOf(packageNames),
                "url :: " + String.valueOf(urlData),
                "로직 :: 일반 브라우저 사용해 외부 링크 이동 실시",
                "Exception :: " + String.valueOf(e.getMessage())
        });

        // [일반 기본 설정된 브라우저로 이동]
        Intent go = new Intent(Intent.ACTION_VIEW);
        go.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
        go.setData(Uri.parse(urlData));
        mContext.startActivity(go);
    }

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

[외부 링크 (크롬, 사파리) 이동 시 url 형식 체크 에러 이슈]

https://blog.naver.com/kkh0977/222844963121?trackingCode=blog_bloghome_searchlist


[안드로이드 Intent 수행 시 크롬 (chrome) 브라우저 실행해 외부 링크 열기 - setPackage]

https://blog.naver.com/kkh0977/223191665993?trackingCode=blog_bloghome_searchlist


[[유틸 파일] goSamsungBrowser : 삼성 브라우저 사용해 외부 링크 이동 실시]

https://blog.naver.com/kkh0977/223551090903?trackingCode=blog_bloghome_searchlist

// --------------------------------------------------------------------------------------

 

반응형
Comments