본문 바로가기
Development/Android

[안드로이드] Android Naver 웹,앱 연동 및 검색스키마 사용!

by 푸민 2015. 10. 14.
반응형


안녕하세요 푸민입니다.

안드로이드에는 암시적 인텐트명시적 인텐트 두가지가 있는데요. 안드로이드에서 암시적 인텐트를 사용하여 각종 다른 앱의 연결을 할 수 있습니다. 명시적 인텐트는 내가 무엇을 실행하는지 정확하게 알고 패키지나 각종 컴포넌트를 호출하는 것입니다. 그에 비해서 암시적 인텐트는 특정 스키마를 요청하면 그에 맞는 것을 안드로이드에서 찾아줍니다. 이런 스키마의 특성을 활용하여 많은 작업을 할 수 있습니다!


먼저 네이버 앱을 한번 호출해볼까요?


1. 네이버 앱 호출 및 예외

- 네이버 앱을 실행해주는 코드입니다.

PackageManager pm = mContext.getPackageManager();

try {

String strAppPackage = "com.nhn.android.search";

pm.getPackageInfo(strAppPackage, PackageManager.GET_ACTIVITIES);


Intent intent = pm.getLaunchIntentForPackage(strAppPackage);

startActivity(intent);

} catch (Exception e) {

Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.setData(Uri.parse("http://m.naver.com/"));

startActivity(intent);

}


위와 같이 PackageManager 를 이용하여 네이버 앱의 패키지 명으로 요청합니다. 그러면 PackageManager 가 검색을 해보고 없으면 Exception 을 호출합니다. 그러면 네이버 앱이 해당 폰에 설치 되지 않은 것이므로, 웹으로 실행해주는 프로세스를 설정해주면 됩니다.



2. 네이버 앱에 검색 페이지 요청

- 네이버 앱을 호출하고 검색 결과 페이지를 표시해 주는 코드입니다.

PackageManager pm = mContext.getPackageManager();

try {

String strAppPackage = "com.nhn.android.search";

pm.getApplicationIcon(strAppPackage).getClass();


Intent intent = new Intent(Intent.ACTION_VIEW);

intent.addCategory(Intent.CATEGORY_DEFAULT);

intent.addCategory(Intent.CATEGORY_BROWSABLE);

intent.setData(Uri.parse("naversearchapp://keywordsearch?mode=result&query="+str+"&version=10"));

startActivity(intent);

catch (Exception e) {

Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.setData(Uri.parse("http://m.search.naver.com/search.naver?query="+str));

startActivity(intent);

}


1번의 코드와 비슷하지요?? 하지만 다릅니다! 먼저 똑같이 PackageManager 를 호출하는 이유는 네이버 앱이 있는지 없는지 확인하기 위해서입니다. 없다면 자연스럽게 Exception 프로세스로 가겠지요? 여튼 있다면 naversearchapp:// 이라는 스키마를 이용합니다. 해당 스키마는 네이버 앱에서 설정해 놓은 스키마입니다. 즉 네이버 앱이 있다면 해당 스키마에 반응 할것이고 없다면 반응을 안할것입니다. naversearchapp:// 스키마에 mode query version 정보를 파라미터로 던져줍니다. 그러면 검색 결과 페이지가 화면에 표시됩니다.


예외 상황에서는 웹의 검색 결과 페이지를 호출해줍니다.

반응형

댓글