2011-08-13 15 views
13

Mam aplikację, która czasami łączy się z imdb. Mogę to zrobić z http://m.imdb.com/find lub jeśli jest dostępny imdb:///find. Mój kłopot polega na tym, że nie mogę znaleźć sposobu na sprawdzenie, czy imdb:// jest dostępny, zanim będzie za późno.Sprawdź, czy dostępna jest funkcja intri

Ponieważ łącze jest klikane przez użytkownika, nie można uchwycić wyjątku android.content.ActivityNotFoundException.

Czy brakuje mi czegoś oczywistego?


Rozwiązanie:

sugestia inazaruk za jestem teraz przy użyciu kodu follwing:

public static boolean isUriAvailable(Context context, String uri) { 
    Intent test = new Intent(Intent.ACTION_VIEW, Uri.parse(uri)); 
    return context.getPackageManager().resolveActivity(test, 0) != null; 
} 

metoda musi być wywoływana z bezpośrednim uri co prosisz, jak imdb:///find zamiast tylko imdb://.

+0

Czy to możliwe, aby uzyskać dane z działalności IMDB? Chodzi mi o to, że może być wspaniale, aby uzyskać np. Ocenę filmu lub coś innego. –

Odpowiedz

14

Możesz użyć resolveActivity(), aby wykryć, czy w systemie istnieje jakaś Activity zdolna do obsługi twojego zamiaru. Oczywiście musisz skonstruować zamiar, który naśladuje kliknięcie "uri". Można to zrobić za pomocą funkcji Intent.setData(), ale ja sam tego nie przetestowałem/nie zweryfikowałem.

+0

Próbowałem 'Intent test = new Intent (Intent.ACTION_VIEW, Uri.parse (" imdb: // find "));' 'getPackageManager(). ResolveActivity (test, 0);', ale nie dostał nawet wzmianka w dzienniku adb. –

+0

To może nie być wspomniane w dziennikach, zależy to od implementacji, aby zdecydować. Możesz jednak dodawać własne logi. Po prostu wydrukuj informacje zwrócone w instancji 'ResolveInfo' z' resolveActivity() '. – inazaruk

+0

Dzięki, pomyślałem, że to będzie wyjątek. Działa jak marzenie. –

0

Obserwowany pracował dla mnie:

Intent intent = new Intent(); 
    intent.setAction("android.intent.action.VIEW"); 
    Uri uri = Uri.parse("imdb:///title/tt1457767/"); 
    intent.setData(uri); 
    this.getActivity().startActivity(intent); 

można zastąpić ciąg w Uri.parse(""); któregokolwiek z poniższych:

  imdb:///name/<nameID> 
      imdb:///find?q=<search_query> 
      imdb:///title/<titleID> 
      imdb:///boxoffice 
      imdb:///name/<nameID> 
      imdb:///find?q=toystory