[안드로이드] 서처블(Searchable) 리소스





읽기전에 손가락 한번 클릭~ >_<

고마워요 ~ Chu ~ ♥


이번글은 서처블(Searchable) 대한 내용 입니다.

서처블(Searchable)

사용자에게 검색이 보여지도록 하기 위해, 안드로이드 프레임워크는 어플리케이션이 검색 되어지는 방법을 처리하는 API 를 제공합니다.

어플리케이션은 검색이 호출되는 방법, 검색 다이얼로그가 보이는 방법, 사용자가 타이핑 할 때 제시되는 추천어를 포함해서 검색 결과들을 커스텀 할 수도 있습니다.

어플리케이션은 안드로이드 검색 프레임워크를 사용하기 위해 XML 리소스 형식으로 검색설정을 제공해야 합니다.

◎ 파일포맷 : XML 은 <?xml> 선언과 루트 <searchable> 엘리먼트를 요구합니다
◎ 파일위치 : res/xml/searchable.xml (권장사항 이름명칭 입니다)
◎ 컴파일 후 리소스 타입 : xml 객체에 대한 리소스 포인터 입니다.

◎ 사용구문
◎ 소스코드 : R.xml.파일명

◎ XML : @[package:]xml/파일명 ( 예 : @xml/searchable )








<searchable> 엘리먼트
어플리케이션 내에서 수행되는 텍스트와 음석 검색들을 위한 설정을 포함하는 모든 검색 설정을 정의하는 엘리먼트 입니다.

속성으로는

label : 필수속성으로서 사용자에게 보여지게 될 어플리케이션에 대한 이름입니다. 이것은 searchMode 가 " showSearchLabelAsBadge " 로 지정되었을 때만 보여집니다.

hint : 검색 텍스트 필드에 어떤 텍스트로 입력되지 않았을 때 보여지는 텍스트 입니다. 이것은 해당 검색이 수행하게 되는 것에 대한 context 를 제공하는 처리에 적합할 것 같습니다.

searchMode : 이것이 제공되고 비어있지 않다면, 검색 화면의 제어를 위한 추가적인 모드를 지정할 수 있습니다. 아래와 같은 모드가 있습니다.
1. showSearchLabelAsBadge : 이것이 지정되면 해당 검색바에 검색대상(라벨)을 보여주는 것을 활성화 합니다.

2. queryRewriteFromData : 이것이 지정되면 추천어 컬럼인 SUGGEST_COLUMN_INTENT_DATA 가 추천어 쿼리 정정을 위한 텍스트로 간주됩니다. 이것은 여기에 있는 값들이 사용자에게 알맞을 때만 사용해야 겠습니다. 일반적으로 HTTP/HTTPs Uri 가 됩니다.

3. queryRewriteFromText : 이것이 지정되면 추천어 컬럼인 SUGGEST_COLUMN_TEXT_1 이 추천어 쿼리를 위한 텍스트로써 간주됩니다. 이것은 쿼리 텍스트가 제공되지 않고, 여기에 있는 사용자에게 알맞지 않을 경우에 추천어를 위해 사용될 수 있습니다.

searchMode 에 대한 값은 한꺼번에 두개의 모드를 선언할 수도 있습니다.
searchMode=”queryRewriteFromData|queryRewriteFromText”


inputType : 이것이 지정되면 사용자가 입력하게 될 텍스트 유형에 대한 힌트를 제공합니다. 자유로는 형식의 텍스트가 될 대부분의 검색 유형에서는, 이 속성은 필요치 않습니다. 디폴트는 "actionSearch" 입니다.

imeOptions : 이것이 지정되면, 입력 방법에 대한 추가적인 옵션을 제공합니다. 자유로운 텍스트의 검색에선 이 속성또한 필요치 않습니다.
디폴트는 "actionSearch"



<actionkey> 엘리먼트
검색에 대한 단축키를 정의합니다.

속성으로는

keycode : 필수속성입니다. 이것은 검색가능한 액티비티에 전달되는 ACTION_SEARCH 인텐트에 추가됩니다. 해당 키코드를 보려면, getIntExtra(SearchManager.ACTION_KEY) 를 사용하면 됩니다. 필수인 키코드를 포함하여 하나 이상의 아래의 액션 속성을 지정해 주어야 합니다.


queryActionMsg : 검색 쿼리를 입력하는동안 액션키를 제어할 때 사용합니다. 이때 여기에 액션 문자열을 정의하면 됩니다. 이것은 검색 가능한 액티비티에 전달되는 ACTION_SEARCH 인텐트에 추가되겠죠. getStringExtra(SearchManager.ACTION_MSG) 를 사용하여 그 문자열을 얻을 수 있습니다.

suggestActionMsg : 만약 추천어가 보여지고 선택되는 동안에 액션키를 제어하고자 할 때, 모든 추천어가 액션키를 제어할 수 있다면 , 이 속성을 사용하는 액션 메시지를 정의하면 됩니다. getStringExtra(SearchManager.ACTION_MSG) 로 얻을 수 있습니다.

또한 suggestActionMsg 와 같은 상황에서 모든 추천어가 액션 키를 활성화 하는 것을 원하지 않을 때, 추천어에 따른 이 속성을 지정합니다. 먼저 액션 문자열을 포함할 추천어가 있는 컬럼을 정의하고 CP에서 이 컬럼을 제공해야 합니다. 그런다음, 필요할 때 이 컬럼에 데이터를 제공해 주어야 합니다. 검색관리자는 하나의 컬럼을 선택하기 위해 제공되는 문자열을 사용하는 추천어 커서를 확인 합니다.
그 문자열은 검색가능한 액티비티에 전달되는 ACTION_SEARCH 인텐트에 추가되며 마찬가지로
getStringExtra(SearchManager.ACTION_MSG) 로 얻을 수 있습니다.
만약 선택된 추천어에 대한 데이터가 없다면, 액션키는 무시됩니다.



추천어를 위해 CP 사용하기

만약 추천 검색을 위해 컨텐트 프로바이더(CP) 를 정의한다면, CP 와의 커뮤니케이션을 설정하기 위하여 더 많은 searchable 메타데이터를 제공해야 합니다. 추천검색을 위해 사용할 추가적인 <searchable> 속성은 아래와 같습니다.

searchSuggestAuthority : 추천검색을 제공하기 위해 필수 속성입니다. 이 값은 매니페스트의 프로바이더 섹션에서 제공되는 authority 문자열과 일치해야 합니다.

searchSuggestPath : 이것이 지정되면, 이 경로는 추천어 쿼리 Uri 에 삽입되고, 그것의 위치는 제공한 authority의 뒤쪽이지만, 표준 추천어 경로의 앞쪽입니다. 결국 이것은 다른 유형의 추천어를 제시하는 하나의 CP를 가질 때에만 필요하며, 그것들이 수신될 때 추천어 쿼리들을 명확하게 할 방법이 필요하겠네요

searchSuggestSelection : 이것이 지정되면, 이 값은 selection 파라미터로서 쿼리 안으로 전달됩니다. 전형적으로 이것은 DB에 대한 WHERE 절이 될 것이며, 사용자에 의해 입력된 실제 쿼리 문자열을 가르키는 하나의 물음표를 포함합니다. 또한 selection을 통해, 공백이 아닌 값을 사용하여 쿼리 텍스트를 간단히 발생시키고 나서, selection 파라미터의 실제 텍스트를 무시하는 방식으로 쿼리 텍스트를 사용하면 되겠습니다.

searchSuggestIntentAction : 사용자가 추천 검색어를 클릭할 때 사용되는 디폴트 인텐트 액션입니다. 이것이 지정되고 선택된 추천어에 의해 오버라이드 되지 않으면, 이 값은 사용자가 추천어를 클릭하는 시점에 인텐트 액션 필드에 위치합니다.

searchSuggestIntentData : 추천어를 클릭할 때 사용되는 디폴트 인텐트 데이터 입니다. 이것이 지정되고 선택된 추천어에 의해 오버라이드 되지 않으면, 이 값은 사용자가 추천어를 클릭하는 시점에 인텐트의 데이터 필드에 위치합니다.



QuickSearchBox 사용하기

어플리케이션 내의 검색에서의 추천어 제공 말고도, 기본 런처에 있는 검색창인 QuickSearchBox 에서 직접 만든 추천어를 사용하도록 할 수도 있습니다.
이것은 사용자가 어플리케이션 외부에서, 직접만든 어플리케이션 컨텐트로부터 추천 검색어를 수신하는 것을 뜻합니다. 이 기능을 하려면 마찬가지로 추가적인 <searchable> 속성을 제공해야 합니다.

includeInGlobalSearch : QuickSearchBox 에 추천 검색어를 제공하기 위한 필수 입니다. true 라면 어플리케이션에 의해 제공되는 추천어가 글로벌 접근이 가능한 QuickSearchBox 에 포함되어야 합니다. 사용자는 시스템 검색 셋팅에서 검색 가능한 아이템으로 직접만든 어플리케이션을 활성화하여 QuickSearchBox 에 추천어가 나타나도록 해야하겠습니다.

searchSettingsDescription : 이것이 제공되면 QuickSearchBox에 추천검색어에 대해 간단한 설명을 제공하고, 그것은 어플리케이션의 검색 셋팅란에서 보여질 것입니다.

queryAfterZeroResult : 과거에 빈 결과를 리턴했던 쿼리들의 슈퍼셋(superSet) 에 대한 소스가 호출되야 하는지의 여부입니다. 예를들어 소스가 'a' 에 대해 빈 결과를 리턴했다면, 'aa' 에 대해서는 무시될 것입니다. false 는 디폴트 값으로써 이것은 하나의 세션에서만 무시되며, 다음번의 모든 소스들은 쿼리가 됩니다.

searchSuggestThreshold : QuickSearchBox 로부터 검색할 필요한 글자수의 최소 갯수를 나타냅니다. 디폴트는 0이며, 최소값 보다 짧은 것은 쿼리되지 않는것을 보장해 주지요.




액티비티에 음성검색 활성화하기

액티비티에 대한 음석 검색을 활성화 하기 위해서는, 음석 검색에 관한 searchable 메타 데이터 필드들을 추가해야 합니다. 아래는 추가적인 <searchable> 속성들입니다.
voiceSearchMode : 음성 검색 기능을 제공하기 위한 필수적인 속성입니다. 이것이 제공되고 비어있지 않는다면 음성 검색을 활성화 할 수 있습니다. ( 단, 디바이스 자체가 음성 검색을 지원하지 않는다면 이 속성은 영향이 없겠죠^^? ). 다음의 모드들이 허용됩니다.
showVoiceSearchButton : 이것이 지정되면 음성검색 버튼을 표시합니다. 이것이 지정되면 "launchWebSearch" 또는 "launchRecognizer" 또한 지정되어야 합니다.

launchWebSearch : 이것이 지정되면 , 음성검색 버튼은 사용자에게, 내장된 음성 웹 검색 액티비티를 보여줍니다. 따라서 현재 액티비티에서 벗어나게 하는 것이기 때문에 일반적으로 사용되지 않을것 같습니다.

launchRecognizer : 이것이 지정되면, 음성검색 버튼은 사용자에게 내장된 음성 녹음 액티비티를 보여줍니다. 사용자가 말을하면, 그것을 텍스트로 기록하고 마치 직접 타이핑 한 것 처럼 검색 가능한 액티비티에 생성된 쿼리 텍스트를 전달해 줍니다.


voiceLaunguageModel : RecognizerIntent 로부터의 문자열 상수입니다. 이것이 제공되면 음성인식에 사용될 언어를 지정합니다. EXTRA_LANGUAGE_MODEL 을 참조하세요. 디폴트는 LANGUAGE_MODEL_FREE_FORM 입니다.


voicePromptText : 말 그대로 문자열 입니다. 이것이 제공되면, 음성 입력동안 보여질 프롬프트를 지정합니다. 이것이 제공되지 않으면 디폴트 프롬프트가 보여지겠지요.

voiceLanguage : 로컬 문자열 상수로써 정의되어 있습니다. 이것이 지정되면 말하게 될 언어를 지정합니다. 현재의 디폴트의 값과 다른 경우에서만 유효할 것입니다.

voiceMaxResult : 이것이 제공되면, SEARCH 인텐트의 기본쿼리로써 " 최적 " 의 결과를 리턴하는 개수를 지정할 수 있습니다. 1 또는 그 이상으로 지정되어야 합니다. 인텐트로부터 결과를 얻기 위해 EXTRA_RESULTS 를 사용합니다.





끝~~








리소스는 모두 끝난것 같네요;;;
이제 인텐트로 넘어갈 예정입니다~
기대 해주세요 뿅!




관련글


댓글(0)

Designed by JB FACTORY