2012-05-01 2 views
1

Android에서 실행기를 작성하고 있으며 여기는 행운을 가지고 잠시 동안 수정하려고 시도한 문제입니다.PackageManager.queryIntentActivities()가 불완전한 목록을 반환합니까?

내 런처 시작 부분에 실행중인 모든 활동, 예를 들어 onResume()을 쿼리하는 코드는 다음과 같습니다.

final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); 
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
final List<ResolveInfo> infos = packageManager.queryIntentActivities(mainIntent, 0); 
for (final ResolveInfo info : infos) { 
    // create my own recrord for each activity  
} 

문제는 그 장치를 기본으로 내 실행을 설정하고 reboot 경우, 때마다 나는 위의 코드에 의해 전체 목록의 일부를 얻을 수 있다는 것입니다. Wind-up Knight와 같은 커다란 뚱뚱한 활동이 항상 빠져있는 것처럼 보입니다. 그러나 코드를 두 번 이상 실행하면 전체 목록이 반환됩니다. 어떤 사람이 그 이유를 알고 있습니까? 내 짐작으로, PackageManager가 뚱뚱한 액티비티를 분석 할 시간이 필요하고, queryIntentActivities()이 너무 일찍 호출되는 경우, 부분 목록 만 반환합니다. 사실입니까?

하지만 기본 시작 프로그램에이 문제가있는 이유는 무엇입니까?

+0

재부팅하기 전에 전체 목록을 저장할 수 있습니까? 예를 들어 환경 설정 또는 파일. – hasanghaforian

답변

2

더 큰 활동은 외장형 스토리지 파티션에 설치 될 가능성이 높습니다. 외장형 스토리지 파티션은 장착하는 데 종종 시간이 걸릴 수 있습니다. 내 삼성 갤럭시 W 폰의 실행기는 SD 카드가 마운트되고 앱을 사용할 준비가 될 때까지 자리 표시 자 아이콘을 표시하여 정확히 수행합니다.

새로운 응용 프로그램을 사용할 수있는 경우 알려주기 위해 PackageManager의 브로드 캐스트가 있어야하지만 한 눈에 찾을 수 없습니다. ACTION_MEDIA_MOUNTED에 귀를 기울여야 할 수도 있습니다. 그리고 PackageManager가 먼저 도착하기를 바랍니다.

+2

감사! 이것은 정확하며 브로드 캐스트는 Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE입니다. – Farmer

+1

그래서 최종 해결책은 무엇입니까? .addCategory()에 넣은 매개 변수는 무엇입니까? _LAUNCHER, 이거?, 아니면 둘 다? – voghDev