2012-10-08 8 views
8

Po wybraniu opcji startActivity() z wybieraczem, Android wyświetli listę wszystkich aplikacji uprawnionych do obsługi Twojego Intent wraz z opcjami ustawiania tego przypisania na stałe lub jednorazowe (w ICS jego "Zawsze "i" Tylko raz "przycisk akcji, na 2.x to pole wyboru). Jednak na ten kod:Nie można ustawić funkcji startActivity() za pomocą opcji Chooser zadając tylko jeden raz dla każdej aplikacji.

public class Redirector { 
    public static void showActivityWithChooser(Context context, int chooserLabelTitleId, Intent intent) { 
     try { 
     context.startActivity(Intent.createChooser(intent, 
        context.getResources().getString(chooserLabelTitleId))); 
     } catch(Exception e) { 
     e.printStackTrace(); 
     } 
    } 

    public static void viewInExternalApplication(Context context, String url) { 
     Intent intent = new Intent( Intent.ACTION_VIEW); 
     intent.setData(Uri.parse(url)); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 
     showActivityWithChooser(context, R.string.open_chooser_title, intent); 
    } 
} 

widzę żadnego „Zawsze | tylko raz” przycisków i nie może zrobić mój wybór stałe (mam tylko aplikacje wymienione i może strzelać każdy dotykając go). Jakie elementy, które przeoczyłem, sprawiły, że Android nie był w stanie uporać się z wyborem użytkownika?

Zobacz fotki: left dialogowe, co chciałbym zobaczyć, ale prawda jest to, co mam teraz (różna liczba wniosków w obu oknach nie ma znaczenia):

enter image description here

+0

'Zawsze" oznacza, że ​​wybór jest stały. Twoja aplikacja nie ma możliwości kontrolowania tego okna, jego części systemu Android bezpośrednio. – mah

+0

@mah: Tęskniłeś za sednem. –

+1

Rzeczywiście tak zrobiłem. Jednak druga połowa mojego komentarza się zgadza; nie jest to okno dialogowe, które można kontrolować za pomocą aplikacji. Problem polega na tym, że wywołujesz program showActivityWithChooser, który nie ma na celu umożliwienia użytkownikowi zmiany jego wartości domyślnej, ale ma na celu zmusić użytkownika do wyboru. – mah

Odpowiedz

16

Dla rekordu - to był rodzaj błędu nadinterpretacji (mojego). Wybieracz, którego używałem, jest dokładnie tym, co widać na obrazie po prawej stronie. A cały czas pokazywał się, ponieważ ... Dzwoniłem cały czas. Błędnie założyłem, że selektor oferuje funkcję "Zawsze | Tylko raz" i nie wyświetliłby się, gdyby użytkownik kliknął "Zawsze" (i wyświetli się, jeśli użył "Tylko raz"). Ale to jest złe. Chooser będzie zawsze wyświetlać zawsze, ponieważ taka jest jego rola - pozwolić użytkownikowi wybrać. Funkcjonalność "Zawsze | Tylko raz" to zupełnie inna sprawa - jest to funkcja systemu Android dla połączeń startActivity() i startActivityForResult() i pojawi się automatycznie, gdy zajdzie taka potrzeba - jeśli jest więcej niż jedna aplikacja (lub dokładnie więcej niż jedna odpowiadająca intent-filter), może obsłużyć określone intencje. Nie pojawi się, jeśli masz tylko jedną (lub użytkownika, który wcześniej kliknął "Zawsze"). Ty, jako programista, nie musisz się troszczyć.

Tak, aby rozwiązać ten problem, po prostu zmieniłem kod viewInExternalApplication() aby to właśnie nazywamy startActivity():

try { 
    context.startActivity(intent); 
} catch (....) 

i niech ramy zrobić resztę.

+1

Dokładnie to, co chciałem zrozumieć! 10x – WindRider

Powiązane problemy