안드로이드 앱에서 구글, 네이버, 다음의 검색 기능을 이용한 웹 검색하는 기능은 Intent를 이용해서 구현할 수 있다.


Intent의 action 가운데 Intent.ACTION_WEB_SEARCH가 이 기능을 안드로이드 시스템에 요청하는 action이다.

이 action을 Intent에 담아서 startActivity로 날리면 안드로이드 시스템은 웹 search를 위한 동작을 수행하게 된다.

기본적으로는 구글 검색을 수행하지만 만일 디바이스(폰)에 네이버 앱이나, 다음 앱이 설치되어 있다면 이들 셋 중에서 선택하는 창이 뜨고 이 창에서 구글, 네이버, 다음의 검색 기능을 이용해서 특정 웹 검색을 수행할 수 있다.




이때 검색할 단어(내용)을 설정하는 것은 Intent의 extra에 담아서 수행하면 된다.

이때 putExtra에 사용할 key를 안드로이드 시스템에서 미리 설정해 두고 있다. 

그것이 SearchManager.QUERY라는 key값이다.

구글(네이버, 다음...)의 웹 검색 창에서 무엇을 검색할지를 안드로이드 시스템에게

알리는데 key 값이다.


Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);

intent.putExtra(SearchManager.QUERY, "검색할 단어");


if (intent.resolveActivity(getPackageManager()) != null) {

     startActivity(intent);

} else {

     String msg = "Sorry, there is no web browser available"; 

     Toast.makeText(this, msg, Toast.LENGTH_LONG).show();

}


Context 클래스의 메소드인 getPackgaeManager() 메소드는 다음과 같다.


public abstract PackageManager getPackageManager () 

⇒ Return PackageManager instance to find global package information.


디바이스에 있는 전 패키지 정보를 획득하기 위한 PackageManger 객체를 반환해 주는 메소드이다.


public ComponentName resolveActivity (PackageManager pm) : Intent 클래스의 메소드

⇒ Return the Activity component that should be used to handle this intent. 


resolveActivity() 메소드는 Intent를 수행할 Activity를 반환한다. 만일 수행할 Activity가 없으면 null을 반환한다.

이럴때 startActivity()를 수행하면 앱이 강제종료를 먹게된다.


그런데 아래 코드의 경우 웹 검색할 앱(Activity)가 구글, 네이버, 다음이 폰에 설치되어 있다면

아래 코드에서는 com.android.internal.app.ResolverActivity가 반환이 된다.

ResolverActivity는 안드로이드 API reference에서 search를 해도 보이지 않는다.

통상적인 클래스들은 API reference에서 search를 하면 자동완성 기능으로 제시가 되는데

ResolverActivity는 표시가 안된다. 

결론적으로 ResolverActivity는 여러개의 Activity가 Intent에 매칭될때 이를 관리하는

클래스이다.



+ Recent posts