검색은 Android의 핵심적인 사용자 기능입니다. 사용자는 콘텐츠가 기기에 있든 인터넷에 있든 사용 가능한 모든 데이터를 검색할 수 있어야 합니다. 사용자에게 일관된 검색 환경을 제공하는 데 도움이 되도록 Android는 애플리케이션 검색을 구현하는 데 도움이 되는 검색 프레임워크를 제공합니다.
검색 프레임워크는 화면 상단의 검색 대화상자와 활동 레이아웃에 삽입할 수 있는 검색 위젯 (SearchView
)이라는 두 가지 검색 입력 모드를 제공합니다. 두 경우 모두 Android 시스템은 검색을 실행하는 특정 활동에 검색어를 전달하여 검색 구현을 지원합니다. 사용자가 입력할 때 검색 대화상자 또는 위젯이 추천 검색어를 제공하도록 설정할 수도 있습니다. 그림 1은 선택적 추천 검색어가 표시된 검색 대화상자의 예를 보여줍니다.
검색 대화상자나 검색 위젯을 설정하면 다음 작업을 할 수 있습니다.
- 음성 검색을 사용하도록 설정합니다.
- 최근 사용자 검색어를 기반으로 추천 검색어를 제공합니다.
- 애플리케이션 데이터의 실제 결과와 일치하는 맞춤 추천 검색어를 제공합니다.
- 시스템 전체의 빠른 검색창에 애플리케이션의 추천 검색어를 제공합니다.
참고: 검색 프레임워크는 데이터 검색을 위한 API를 제공하지 않습니다. 검색을 실행하려면 데이터에 적합한 API를 사용해야 합니다. 예를 들어 데이터가 SQLite 데이터베이스에 저장된 경우 android.database.sqlite
API를 사용하여 검색을 실행합니다.
또한 기기가 애플리케이션의 검색 인터페이스를 호출하는 전용 검색 버튼을 제공한다고 보장하지 않습니다. 검색 대화상자나 맞춤 인터페이스를 사용하는 경우 UI에 검색 인터페이스를 활성화하는 검색 버튼을 제공해야 합니다. 자세한 내용은 검색 대화상자 호출을 참고하세요.
다음 페이지에서는 Android 프레임워크를 사용하여 검색을 구현하는 방법을 보여줍니다.
- 검색 인터페이스 만들기
- 검색 대화상자나 검색 위젯을 사용하도록 애플리케이션을 설정하는 방법입니다.
- 최근 쿼리 추천 추가
- 이전에 사용한 쿼리를 기반으로 추천 검색어를 제공하는 방법입니다.
- 맞춤 제안 추가하기
- 애플리케이션의 맞춤 데이터를 기반으로 추천 검색어를 제공하고 시스템 전체의 빠른 검색창에서 제공하는 방법
- 검색 가능한 구성
- 검색 가능한 구성 파일에 대한 참조 문서입니다. 다른 문서에서는 특정 동작과 관련하여 구성 파일을 설명합니다.
사용자 개인 정보 보호
애플리케이션에서 검색을 구현할 때는 사용자의 개인 정보를 보호하기 위한 조치를 취합니다. 많은 사용자가 휴대전화에서의 활동(검색 포함)을 비공개 정보로 간주합니다. 사용자의 개인 정보를 보호하려면 다음 원칙을 따르세요.
- 개인 정보를 서버에 전송하지 마세요. 또한 필요한 경우 기록하지도 않습니다.
개인 정보란 사용자를 개인적으로 식별할 수 있는 정보(예: 이름, 이메일 주소, 결제 정보 또는 이러한 정보와 합리적으로 연관이 있을 수 있는 기타 데이터)입니다. 애플리케이션에서 서버의 도움을 받아 검색을 구현하는 경우 검색어와 함께 개인 정보를 전송하지 마세요. 예를 들어 우편번호 인근 비즈니스를 검색하는 경우 사용자 ID도 전송할 필요 없이 우편번호만 서버에 보내면 됩니다. 개인 정보를 전송해야 하는 경우 로깅하지 마세요. 로깅해야 하는 경우 해당 데이터를 매우 신중하게 보호하고 가능한 한 빨리 지웁니다.
- 사용자에게 검색 기록을 지우는 방법을 제공합니다.
검색 프레임워크는 사용자가 입력하는 동안 애플리케이션이 상황에 맞는 추천 검색어를 제공하도록 도와줍니다. 이러한 추천은 이전 검색어 또는 이전 세션에서 사용자가 취한 다른 작업을 기반으로 하는 경우도 있습니다. 사용자는 이전 검색이 다른 기기 사용자에게 공개되는 것을 원하지 않을 수 있습니다. 애플리케이션이 이전 검색 활동을 표시할 수 있는 추천을 제공한다면 사용자가 검색 기록을 지울 수 있는 방법을 구현합니다.
SearchRecentSuggestions
를 사용 중인 경우clearHistory()
메서드를 호출할 수 있습니다. 맞춤 추천을 구현하는 경우 콘텐츠 제공자에 사용자가 실행할 수 있는 유사한 '기록 삭제' 메서드를 제공해야 합니다.