1 komentarz

Sprawdzanie czy istnieje Aktywność mogąca obsłużyć konkretną Intencję

Lipiec 23, 2011 Intent Snippety

Przykład metody, która pozwoli nam sprawdzić, czy urządzenie posiada aplikacją (Aktywność) pozwalającą na obsłużenie konkretnej Intencji.

Poniższy kod może być przydatny szczególnie wtedy, gdy nasza aplikacja wysyła Intencje, do obsłużenia których potrzebne są aplikacje niedostarczone domyślnie z systemem. Pozwala on na uniknięcie wyjątku:

android.content.ActivityNotFoundException: No Activity found to handle Intent

private void startActivityOrWarn(Intent intent) {
	if(isIntentActivityAvailable(intent)) {
		startActivity(intent);
	} else {
		showUnavailabilityInfo();
	}
}

private boolean isIntentActivityAvailable(Intent intent) {
	Context context = getApplicationContext();
	PackageManager pm = context.getPackageManager();
	List<ResolveInfo> resolveInfoList = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
	return resolveInfoList.size() > 0;
}

private void showUnavailabilityInfo() {
	Toast.makeText(getApplicationContext(),
			"Your system hasn't necessary application for this intent",
			Toast.LENGTH_LONG)
			.show();
}

Efekt działania

Oto efekt działania powyższego kodu dla wywołania Intencji:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:50.07,19.97"));
startActivityOrWarn(intent);

Aplikacja była uruchamiana na emulatorze, który nie posiada domyślnie zainstalowanych Map Google (ani żadnego programu, który obsługuje adres URI lokalizacji – geo:).

Komentarze (1) Subskrybuj

 

  1. [...] Sprawdzanie czy istnieje Aktywność mogąca obsłużyć konkretną Intencję [...]

Prześlij komentarz

Zaloguj się lub skorzystaj z profilu:

[rpxlogin redirect="http://www.android4devs.pl" prompt="" style="large"]

Możesz również zostawić komentarz bez rejestracji, korzystając z poniższego formularza:

Musisz być zalogowany aby móc pisać komentarze.