안드로이드

[안드로이드] 특정앱 설치여부 확인하기

http://portfolio.wonpaper.net 2023. 5. 5. 14:16

아래는 Fragment 형태의 메뉴를 기준으로 소스코딩한 예시 코드이다.

 

[ HomeFragment.java ]

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public class HomeFragment extends Fragment {
    private Context context;
 
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        context = container.getContext();
        View view = inflater.inflate(R.layout.fragment_home, container, false);
 
        PackageManager pm = this.getActivity().getPackageManager();
        if (isPackageInstalled("io.metamask", pm)) {
            // 메타마스크 설치된 경우 실행할 코드
        } else {
            // 메타마스크가 설치되지 않은 경우 실행할 코드
            showInstallMetamaskDialog();
        }
        return view;
  }
 
    private boolean isPackageInstalled(String packageName, @NotNull PackageManager packageManager) {
        try {
            packageManager.getPackageInfo(packageName, 0);
            return true;
        } catch (PackageManager.NameNotFoundException e) {
            return false;
        }
    }
 
    // 메타마스크 설치 다이얼로그 표시 함수
    private void showInstallMetamaskDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setMessage("메타마스크를 설치해주세요.")
                .setCancelable(false)
                .setPositiveButton("설치하기"new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        Intent intent = new Intent(Intent.ACTION_VIEW);
                        intent.setData(Uri.parse("https://play.google.com/store/apps/details?id=io.metamask"));
                        startActivity(intent);
                    }
                })
                .setNegativeButton("취소"new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        dialog.cancel();
                    }
                });
        AlertDialog alert = builder.create();
        alert.show();
    }
 
 
}
cs

 

[ 주의사항 ]

Android 11(API Level 30)부터 설치 여부를 조회할 수 없고, AndroidManifest.xml 에서 아래 소스를 추가한 후 사용해야 한다.

 

<manifest>
    <queries>
        <package android:name="io.metamask"/> // 설치확인할 패키지명
    </queries>
</manifest>

 

 

 

 

 

 

참고 : https://stackoverflow.com/questions/22396382/cant-find-getpackagemanager-method-in-android

참고 : https://effectivecode.tistory.com/838

참고 : https://es1015.tistory.com/419