안녕하세요 푸민입니다.
안드로이드에는 암시적 인텐트와 명시적 인텐트 두가지가 있는데요. 안드로이드에서 암시적 인텐트를 사용하여 각종 다른 앱의 연결을 할 수 있습니다. 명시적 인텐트는 내가 무엇을 실행하는지 정확하게 알고 패키지나 각종 컴포넌트를 호출하는 것입니다. 그에 비해서 암시적 인텐트는 특정 스키마를 요청하면 그에 맞는 것을 안드로이드에서 찾아줍니다. 이런 스키마의 특성을 활용하여 많은 작업을 할 수 있습니다!
먼저 네이버 앱을 한번 호출해볼까요?
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 정보를 파라미터로 던져줍니다. 그러면 검색 결과 페이지가 화면에 표시됩니다.
예외 상황에서는 웹의 검색 결과 페이지를 호출해줍니다.
'Development > Android' 카테고리의 다른 글
[안드로이드] Android Nate 웹,앱 연동 및 검색스키마 사용! (0) | 2015.10.15 |
---|---|
[안드로이드] Android Daum 웹,앱 연동 및 검색스키마 사용! (0) | 2015.10.15 |
[안드로이드] Android Fragment 사용 예제 (0) | 2015.10.14 |
[안드로이드] Android Bitmap byte[] 변환 (0) | 2015.10.12 |
[안드로이드] Android SQLite - 2 Handler 클래스 (0) | 2015.10.11 |
댓글