안드로이드 개발 질문/답변
(글 수 45,052)
특정 어플리케이션의 호출가능한 액티비티 목록을 알수있는 방법이 있을까요?
또는 어플리케이션과 상관없이 폰에 설치된 호출가능한 모든 액티비티 목록을 확인할수 있는 방법이 있는지 궁금합니다.
제 질문은 이미 알고 있는 액티비티에 대해 호출가능한지 알구싶다는 의미는 아닙니다.
알고 있는 액션에 대한 호출가능한 액티비티의 목록을 보려면 다음처럼 하면되는데...
Intent intent = new Intent("intent.name");
final PackageManager packageManager = getPackageManager();
List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
이 경우는 대상 액션 이름을 이미 알고 있는 경우입니다.
제가 알고 싶은 것은 액션 이름을 모르더라도 외부에서 호출가능하도록 노출한 액티비티의 목록을 구할수 있는가 입니다.
다시 말해서 <action android:name="android.intent.action.MAIN"/> 가 지정된 액티비티에 대한 호출정보를 알수있는 방법이 있는가 입니다.
사실, 이런 질문을 드리는 이유는 기기에 설치된 영어사전을 호출하고 싶어서 입니다.
겔럭시s 같은 경우는 기본적으로 사전이 설치되어 있는데 이놈이 가진 기능을 제 어플리 케이션에서 사용하고 싶어서 입니다.
경험이 있은신분 부탁드리겟습니다.
2010.10.18 09:58:29
답변 감사합니다.
맞는 말씀이지만 일단 일단 호출이라도 가능해야 다음단계로 넘어갈수 있지 않을까요?저역시 이부분을 쉽게 생각하고 있지는 않습니다. 필요하다면 리버싱까지 할맘으로.. ^^
쉽게 해결할수 있는 부분이 있다면 그 방법을 이용하려고 질문을 드렸습니다.
질문 올리구 방법이 있을까 하여 안드로이드 소스의 어플리케이션 관리 부분의 소스를 분석해보는 중입니다.
방법을 찾는다면 여기에 올리도록 하겠습니다.
호출가능한 액티비티 목록을 가져오는법 아시는분 다시한번 부탁드리겠습니다.
ps. 아... 그리고 그런거 삼성에 물어보면 알려주나요? 어디로 물어보면 되는지 알려주시면 감사~
2010.10.18 14:12:07
런처 소스를 보니 간단한 방법이 있네요.
final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
final PackageManager manager = getPackageManager();
final List<ResolveInfo> apps = manager.queryIntentActivities(mainIntent, 0);
이렇게 하니 <action android:name="android.intent.action.MAIN"/>로 지정된 액티비티는 모두 구할수가 있습니다.
이런 방법으로 대강 알아본 바로는 겔러시S에 포함된 사전이 디오텍이라는 회사에서 개발한거 같더군요.(파일 이름으로 봐서...)
이제 볼레로님 말씀대로 디오텍에 알아보던지 만약 그래서 않되면 어려운 방법으로(ㅠㅜ) 이용방법을 알아가야 할것 같습니다.
찾고 싶을 단어를 어떻게 전달할지? 받아드리는 지는 별개의 문제 인듯합니다.
그냥 실행만 하실 것이라면 상관없지만,
사전이라면 호출하는 쪽에서 단어 전달을 하고, 단어 검색 화면으로 떠야 할 텐데요.
이것을 하실려면 삼성이 해당 프로그램 개발사로 문의해야 하지 않을까 합니다.