2012-10-08 1 views
8

Seçici ile startActivity() yaptığınızda Android, bu atamayı kalıcı veya bir kez ayarlamak için seçeneklerle birlikte tüm uygulamaları listeleyecektir (ICS'de "Her zaman" "ve" Sadece bir kez "eylem düğmesi, 2.x onay kutusu). Ancak bu kodu: "| Sadece bir kere Her zaman" düğmeleri ve (yalnızca sıralanan uygulamalar var ve bunu dokunarak herhangi kovabilir) benim seçimi sonradan yapamazSeçici başına startActivity() öğesi uygulama başına yalnızca bir kez soran yapamazsınız

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); 
    } 
} 

Hiç bkz. Android'in kullanıcı seçimini kalıcı hale getirememesini hangi temel ilkeyi göz ardı ettim?

fotoğraflarını bak: Ben görmek istiyorum neyi iletişim edilir sol, ama şu ben şimdi ne olsun (hem diyaloglarda uygulamaların farklı sayı alakasız): Bir kayıt için

enter image description here

+0

'Her zaman, seçimi kalıcı kılmak demektir. Uygulamanızın bu iletişim kutusunu doğrudan Android'in bir parçası olarak kontrol etmenin bir yolu yoktur. – mah

+0

@mah: Noktayı kaçırdınız. –

+1

Gerçekten yaptım. Ancak, yorumumun ikinci yarısı duruyor; Bu, uygulamanızdan kontrol edebileceğiniz bir iletişim kutusu değildir. Sorun, kullanıcının varsayılanlarını değiştirmesine izin vermeyecek ancak bunun yerine kullanıcıyı seçmeye zorlamayı amaçlayan showActivityWithChooser'ı çağırmanızdır. – mah

cevap

16

- aşırı yorumlama tipi bir hataydı (benimki). Kullandığım seçici tam olarak resimde sağ tarafta görülebilen şey. Ve her zaman gösteriyordu çünkü ... her zaman onu arıyordum. Seçicinin "Always | Just once" işlevini sunması ve kullanıcının "Always" ("Her zaman") 'a basması durumunda gösterilmemesi yanlış bir şekilde hatalıydı ve ("Just" (Sadece bir kez) kullanıldığında görünecektir). Ama bu yanlış. Seçici her zaman gösterecektir çünkü bu onun rolüdür - kullanıcının seçmesine izin vermek. "Her zaman | Sadece bir kez" işlevi farklı bir şey - bu, startActivity() ve startActivityForResult() çağrıları için Android çerçevesinin özelliğidir ve gerektiğinde otomatik olarak görünecektir - birden fazla uygulama varsa (veya tam olarak, birden fazla eşleşme olan intent-filter) belirli niyetle baş edebilir. Sadece bir tane (veya daha önce kullanıcı "Her zaman") girdiğinizde görünmez. Siz, geliştirici olarak bakmaya ihtiyacınız yok.

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

ve çerçeve dinlenme yapalım:

Yani bu düzeltmek için, sadece bu sadece startActivity() çağrı yapmak benim viewInExternalApplication() kodunu değiştirdi.

+1

Tam olarak ne anlamak istedim! 10x – WindRider