2012-08-31 5 views
1

두 가지 일반 동작을 처리하기 위해 클래스 BaseActivity을 작성하려고합니다.안드로이드에서 홈 액티비티를 시작하는 방법

그 중 하나는 응용 프로그램 아이콘을 클릭하여 첫 번째 활동으로 재 도입하는 것입니다. 이것은 간단하게 들리지만이 BaseActivity은 도서관 프로젝트에 포함됩니다. 명시적인 의도 (클래스에 의해 정의 됨)를 사용할 수 없습니다. 내가 ActivityNotFoundException를 얻고 있다는

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (item.getItemId() == android.R.id.home) { 
     // app icon in action bar clicked: go back home 
     Intent intent = new Intent(Intent.ACTION_MAIN); 
     intent.addCategory(Intent.CATEGORY_LAUNCHER); 
     intent.setPackage(getPackageName()); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(intent); 
     return true; 

    } else { 
     return super.onOptionsItemSelected(item); 
    } 
} 

내 문제는 내가 그 이유를 이해하지 못하는 대신 나는 일반적인 의도를 사용하는 것을 시도하고있다.

어떻게해야합니까?

+1

액티비티를 설정하지 않은 것 같습니다. 패키지를 설정하지 않으면 패키지 – zapl

+0

@zapl 만 표시됩니다. 그러면 모든 애플리케이션이 의도 해결의 후보가 될 수 있습니다. 어떻게 든 내 애플 리케이션을위한 필터를 추가해야합니다. – rds

답변

0

PackageManager에서 getLaunchIntentForPackage()을 검색하는 것처럼 들립니다. 패키지 이름을 매개 변수로 취하고 해당 패키지의 주요 활동을 시작하기 위해 Intent을 작성합니다. 이 방법으로 패키지 내에서 실행해야하는 특정 클래스를 표시 할 필요가 없습니다.

현재 구현 범주 CATEGORY_LAUNCHER에 다음의 주요 활동은 카테고리 CATEGORY_INFO의 주요 활동 먼저 찾거나 둘 발견되지 않은 경우는 null를 돌려줍니다.

+0

정확히 내가하고 싶었던 것, 그리고'PackageManage'는 내가하는 것보다 그 종류의 의도를 더 잘 형성합니다. – rds

관련 문제