2013-09-08 10 views
8

Próbuję załadować adres URL Twittera w przeglądarce.Jak wykluczyć określoną aplikację ze wzmianki ACTION_VIEW?

W moim telefonie zainstalowałem również aplikację Twitter. Próbuję otworzyć adres URL, używając intencji ACTION_VIEW. Ale co się stanie, kiedy wezwę intencję, Android pokaże domyślne okno dialogowe wyboru, które zawiera również aplikację Twitter (jeśli jest zainstalowana na urządzeniu). Chcę otworzyć adres URL tylko przy użyciu przeglądarek. Chcę wykluczyć aplikację Twitter z okna dialogowego. Chcę, aby wszystkie dostępne przeglądarki w urządzeniu wyświetlały się w oknie dialogowym, a nie aplikacje natywne, takie jak twitter, facebook itp.

Czy to możliwe, czy nie? Jeśli to możliwe, ktoś może mi pomóc w osiągnięciu tego. Załączam również mój kod i zrzut ekranu wraz z tym pytaniem dla jasności.

String url = "https://twitter.com"; 
MimeTypeMap map = MimeTypeMap.getSingleton(); 
String type = map.getMimeTypeFromExtension(url); 
Intent i = new Intent(Intent.ACTION_VIEW); 
i.setType(type); 
i.setData(Uri.parse(url)); 
startActivity(i); 

enter image description here

Odpowiedz

3

Trzeba tylko ustawić pakiet docelową do intencji:

String url = "https://twitter.com"; 
MimeTypeMap map = MimeTypeMap.getSingleton(); 
String type = map.getMimeTypeFromExtension(url); 
Intent i = new Intent(Intent.ACTION_VIEW); 
i.setType(type); 
i.setData(Uri.parse(url)); 
ComponentName comp = new ComponentName("com.android.browser", "com.android.browser.BrowserActivity"); 
i.setComponent(comp); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

Jednak użytkownicy moich zostać zakłócony, jeśli mają zainstalowany jakiś przeglądarka zwyczaj i chcemy to wykorzystać jako domyślna.

Można próbować wykrywać domyślną przeglądarkę z:

Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://example.com")); 
List<ResolveInfo> list = context.getPackageManager() 
    .queryIntentActivities(i, 0); 
// walk through list and select your most favorite browser 
+0

Bez różnicy, wciąż pokazuje ten sam widok. Wprowadziłem niewielką zmianę do twojego kodu. nie wiem, czy jest to potrzebne, czy nie. To pokazuje prawie wszystkie aplikacje w moim urządzeniu. –

+0

tutaj jest zmodyfikowany kod. Skomentowałem ustawienie danych i typu. String url = "https://twitter.com"; Mapa MimeTypeMap = MimeTypeMap.getSingleton(); Typ ciągu = map.getMimeTypeFromExtension (url); \t \t Intent i = new Intent (Intent.ACTION_VIEW); \t \t //i.setType(type); \t \t //i.setData(Uri.parse(url)); \t \t // ComponentName comp = new Nazwa komponentu ("com.android.browser", "com.android.browser.BrowserActivity"); \t \t ComponentName comp = new Intent (type, Uri.parse (url)). ResolveActivity (this. GetPackageManager()); \t \t i.setComponent (comp); \t \t i.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); \t \t startActivity (i); –

+0

cóż, twój kod nie będzie działać. wypróbuj moje wcześniej. – flx

9

muszę zrobić coś podobnego i okazało this odpowiedź za pomocną. Zmodyfikowałem go tak, aby był kompletnym rozwiązaniem:

public static void openFileWithInstalledAppExceptCurrentApp(File file, final Activity activity) { 
    Intent intent = new Intent(); 
    intent.setAction(android.content.Intent.ACTION_VIEW); 
    MimeTypeMap mime = MimeTypeMap.getSingleton(); 
    String ext = file.getName().substring(file.getName().indexOf(".")+1); 
    String type = mime.getMimeTypeFromExtension(ext); 
    intent.setDataAndType(Uri.fromFile(file),type); 
    PackageManager packageManager = activity.getPackageManager(); 
    List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0); 
    String packageNameToHide = "com.test.app"; 
    ArrayList<Intent> targetIntents = new ArrayList<Intent>(); 
    for (ResolveInfo currentInfo : activities) { 
      String packageName = currentInfo.activityInfo.packageName; 
     if (!packageNameToHide.equals(packageName)) { 
      Intent targetIntent = new Intent(android.content.Intent.ACTION_VIEW); 
      targetIntent.setDataAndType(Uri.fromFile(file),type); 
      targetIntent.setPackage(packageName); 
      targetIntents.add(targetIntent); 
     } 
    } 
    if(targetIntents.size() > 0) { 
     Intent chooserIntent = Intent.createChooser(targetIntents.remove(0), "Open file with"); 
     chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetIntents.toArray(new Parcelable[] {})); 
     activity.startActivity(chooserIntent); 
    } 
    else { 
     Toast.makeText(this, "No app found", Toast.LENGTH_SHORT).show(); 
    } 
} 
+2

Zapomniałeś '!' Przed 'pakietNameToHide.equals (packageName)'. Teraz zawsze otwiera się pakiet packageNameOfAppToHide. – Roel

+0

@DalvikVM dzięki za sugestię. Oboje piszecie. Naprawiłem błąd. :) – Sufian

+0

@ lf215 Przepraszam, że twoja edycja została już odrzucona, zanim mógłbym ją zatwierdzić. Zrobiłem poprawkę. Dzięki. :) – Sufian

Powiązane problemy