투케이2K

240. (AndroidStudio/android/java) 외부 앱 메인 이동 시 intent 인텐트 데이터 전송 실시 본문

Android

240. (AndroidStudio/android/java) 외부 앱 메인 이동 시 intent 인텐트 데이터 전송 실시

투케이2K 2021. 12. 22. 22:02
반응형

[개발 환경 설정]

개발 툴 : 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 [인풋으로 들어온 데이터가 널인지 판단 실시]
        if (packageNames != null && packageNames.length()>0 && !packageNames.equals("") && !packageNames.contains("null"))){
            Toast.makeText(getApplication(), "해당 앱으로 이동합니다.", Toast.LENGTH_SHORT).show();
        }
        else {
            Toast.makeText(getApplication(), "애플리케이션 정보를 다시 확인해주세요.", Toast.LENGTH_SHORT).show();
            return; // [메소드 종료 실시]
        }

        //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.i("---","---");
            Log.d("//===========//","================================================");
            Log.i("","\n"+"[ParentActivity > goAppRun() 메소드 : 앱 실행 및 마켓 이동 실시]");
            Log.i("","\n"+"[packageNames : "+String.valueOf(packageNames)+"]");
            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){ //TODO [외부 앱이 설치 된 경우]

            /**
             * 1) 구글 플레이스토어에서 앱이 설치된지 확인
             * 2) 설치되지 않은 경우 앱 설치 진행 / 설치된 경우 외부앱 실행 실시
             */
            
            try {
                // TODO [외부앱 메인으로 이동 실시]
                Intent intent = getPackageManager().getLaunchIntentForPackage(packageNames); 
                intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                intent.putExtra("pkg", "com.twok.app"); // [데이터 전송]
                intent.putExtra("user_id", "twok"); // [데이터 전송]
                startActivity(intent);
                overridePendingTransition(0,0);
            }
            catch (Exception e){
                e.printStackTrace();
            }
        }
        else{ //TODO [외부 앱이 설치되어있지 않은 경우]
            Toast.makeText(getApplication(), "해당 앱을 받기 위해 마켓으로 이동합니다.", Toast.LENGTH_SHORT).show();
            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