[Android] 안드로이드 설치되어 있는 다른 앱(외부 앱) 실행

[Android] 안드로이드 설치되어 있는 다른 앱(외부 앱) 실행

다음은 앱이 설치되어 있는지 여부를 패키지 명으로 검사하는 메서드다.

    public boolean checkPackageExisting(String packageName) {
        if (packageName == null || packageName.length() == 0) {
            return false;
        }

        boolean bExist = false;

        PackageManager pkgMgr = getPackageManager();
       
        Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        List<ResolveInfo> mApps = pkgMgr.queryIntentActivities(mainIntent, 0);

        if (mApps != null && mApps.size() > 0) {
            for (int i = 0; i < mApps.size(); i++) {
                try {
                    if (mApps.get(i).activityInfo.packageName.startsWith(packageName)) {
                        bExist = true;
                        break;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    bExist = false;
                }
            }
        }

        return bExist;
    }

설치되어 있는 다른 앱(외부 앱)을 실행하는 코드는 다음과 같다.

    String packageName = “com.bb.testapp”;
    if (checkPackageExisting(packageName)) {
        Intent intent = getPackageManager().getLaunchIntentForPackage(packageName);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

       
        startActivity(intent);
    }

이 때, 외부 앱을 실행하기 위한 Intent 를 사용하는 방법이 여러가지 있다.

(1) LAUNCHER 카테고리에 해당하는 액션을 실행하려면 다음과 같이 쓰면 된다.

String packageName = “com.bb.testapp”;

Intent intent = getPackageManager().getLaunchIntentForPackage(packageName);

대상이 되는 어플리케이션의 AndroidManifest.xml 에는 다음과 같이 정의되어 있어야 한다.

<intent-filter>
    <action android:name=”android.intent.action.MAIN” />
    <category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>

(2) 특정 패키지의 특정 액티비티를 실행하려면 다음과 같이 쓰면 된다.

Intent intent = new Intent();
intent.setClassName(“com.bb.testapp”, “com.bb.testapp.MainActivity”);

대상이 되는 어플리케이션의 com.bb.testapp 패키지 하위에 MainActivity.java 파일이 있어야 한다.

(3) DEFAULT 카테고리에 해당하는 액션을 실행하려면 다음과 같이 쓰면 된다.

Intent intent = new Intent(“com.bb.testapp.action.MAIN”);

대상이 되는 어플리케이션의 AndroidManifest.xml 에는 다음과 같이 정의되어 있어야 한다.

<intent-filter>
    <action android:name=”com.bb.testapp.action.MAIN” />
    <category android:name=”android.intent.category.DEFAULT” />
</intent-filter>

만약 외부 앱을 실행하면서 동시에 데이터를 전달하고 싶다면 intent.putExtra 메서드를 사용한다.

    String packageName = “com.bb.testapp”;
    if (checkPackageExisting(packageName)) {
        Intent intent = getPackageManager().getLaunchIntentForPackage(packageName);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
       

        // 외부 앱에 데이터를 전달
        intent.putExtra(“key1”, “value1”);
        intent.putExtra(“key2”, “value2”);
        intent.putExtra(“key3”, “value3”);
       
        startActivity(intent);
    }

한편, 호출당하는 외부 앱 입장에서 값을 전달받기 위해서는 intent.getStringExtra 메서드를 사용하면 된다.

호출당하는 앱의 메인 액티비티 onCreate 메서드 내용을 아래와 같이 코딩한다.

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // 중략

        Intent intent = getIntent();
        String extraKey1 = intent.getStringExtra(“key1”);

        System.out.println(“extraKey1 : “ + extraKey1);
        Toast.makeText(this, “extraKey1 : “ + extraKey1, Toast.LENGTH_LONG).show();

        // 중략

    }

참고사이트 : https://www.fun25.co.kr/blog/android-execute-3rdparty-app/?category=003