본문 바로가기
안드로이드 자바

[Android][Java]Intent를 이용해 다른 앱으로 이동하기

by teamnova 2023. 4. 19.

안녕하세요 오늘은 기기 내에 이동할 앱이 있는지 확인하여 있다면 해당 앱으로 이동하고 없다면 구글플레이스토어로 이동하는 예제를 만들어보겠습니다.

먼저 매니페스트 파일에 다른 앱과 상호작용을 위해 queries를 이용해 앱을 지정합니다

<queries>
    <package android:name="com.albamon.app"/>
</queries>

이 코드는 manifest태그 하위 태그로 지정합니다.

다음은 액티비티 xml파일입니다. 버튼 하나를 만들어 클릭했을 때 이동 되게끔 만들겁니다.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="알바몬 앱으로 이동"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:id="@+id/move_to_albamon_btn"/>


</androidx.constraintlayout.widget.ConstraintLayout>

다음은 액티비티의 클래스 파일입니다.

public class MainActivity extends AppCompatActivity {
    Button move_to_albamon_btn;
    String albamon_package_name = "com.albamon.app";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        move_to_albamon_btn = findViewById(R.id.move_to_albamon_btn);
        move_to_albamon_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(CheckPackageName(albamon_package_name)){
                    Intent albamon_intent = getPackageManager().getLaunchIntentForPackage(albamon_package_name);
                    startActivity(albamon_intent);
                }else {
                    String url = "market://details?id=" + albamon_package_name;
                    Intent albamon_intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                    startActivity(albamon_intent);
                }
            }
        });
    }

    public boolean CheckPackageName(String package_name) {
        boolean isExist = false;

        PackageManager packageManager = getPackageManager();
        List<ResolveInfo> mApps;
        Intent intent = new Intent(Intent.ACTION_MAIN, null);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        mApps = packageManager.queryIntentActivities(intent, 0);
        try {
            for (int i = 0; i < mApps.size(); i++) {
                if(mApps.get(i).activityInfo.packageName.startsWith(package_name)){
                    isExist = true;
                    break;
                }
            }
        }
        catch (Exception e) {
            isExist = false;
        }
        return isExist;
    }
}