안드로이드 스튜디오

안드로이드 개발 일지 (21.10.17)

hojung 2021. 11. 2.
728x90
반응형

오늘은 갑자기 코로나 동선 알림이 어플과 연동을 해야 한다는 미션이 떨어졌다....

앱과 앱 사이의 통신은 암시적 인텐트를 통해 소통한다는 것만 알고 있었으나 실제로 해보는 것은 처음이었다. 

학교 어플의 경우 webview를 통해 웹 백엔드에서 정보를 받아와서 custom schema가 따로 존재했다. 

따라서 일반적인 경우 intent를 통해 불러오고 싶은 어플리케이션의 패키지 네임이나 패키지 네임 + 액티비티 이름을 불러주면 되지만 나는 웹 백엔드에서 설정한 schema에 따라서 parsing하는 작업을 통해 어플리케이션을 호출해야 했다.

public boolean shouldOverrideUrlLoading(WebView view, String url) {
			Log.i("test", url);
			view.clearFocus();
			pb.setVisibility(View.VISIBLE); // ProgressBar 표시

			if(timer != null){
				timer.cancel();
				timer.purge();
			}

'shouldOverrideUrlLoading(webview view, string url) 함수를 통해 파라미터를 통해 url을 받아오고 이 url 에 따른 스키마가 정해져 있으므로 스키마에 따라 코드를 작성해준다. 

학교 어플리케이션의 경우 어플리케이션과 연동되는 경우 APP:으로 스키마가 시작되게 설정해 두었으므로 APP이라는 url이 들어오면 연동하고 싶은 어플리케이션의 패키지 이름을 받아온다. 

else if(url.toUpperCase().startsWith("APP:")){
				String package_name = url.substring(4); //app의 경우 app:을 자르고
				if(package_name.toUpperCase().startsWith("KR.COURSEMOS.ANDROID2"))
				{ Toast.makeText(WebViewActivity.this, "코스모스 어플로 이동합니다.", Toast.LENGTH_SHORT).show();
				PackageManager packageManager = getPackageManager();
				Intent intent = packageManager.getLaunchIntentForPackage(package_name);
				startActivity(intent);
				return true;
				}

학교 어플리케이션과 연동되는 코스모스 어플리케이션의 경우 위의 코드를 통해 연동된다. intent를 통해 getLaunchIntentForPackage함수를 통해 intent를 정의하고 startActivity함수를 통해 실행하는 것을 확인할 수 있다. 

else if(package_name.toUpperCase().startsWith("KR.CO.CRYPTOLAB.PANDEMICGUARDGG"))
				{
					try {
						Toast.makeText(WebViewActivity.this, "코동이 어플로 이동합니다.", Toast.LENGTH_SHORT).show();
						PackageManager packageManager = getPackageManager();
						Intent intent = packageManager.getLaunchIntentForPackage(package_name);
						startActivity(intent);
						return true;
					} catch(Exception e)
					{
						Toast.makeText(WebViewActivity.this, "코동이 어플 설치를 완료해주세요", Toast.LENGTH_SHORT).show();
						Intent intent = new Intent(Intent.ACTION_VIEW);
						intent.setData(Uri.parse("market://details?id=" + package_name));
						startActivity(intent);
						return true;
					}
				}

내가 작업한 코동이 어플의 경우 많은 사람들이 어플리케이션이 안깔려져 있는 경우가 대부분이므로 어플리케이션이 깔리지 않아 intent가 전달되지 않으면 (market:://details?id = 패키지네임) 주소로 이동해 어플리케이션을 설치할 수 있도록 하였다.

 

 

728x90
반응형

댓글