2015-09-18 24 views
9

Uygulama, belirli web sitesinin içeriğini göstermek için Etkinliğe sahiptir. "Example.com". Ben krom özel kullanmaya karar Chrome özel sekmeleri ve amaç filtresi

<activity 
    android:name=".LinkInterceptorActivity"> 
    <intent-filter android:priority="999"> 
     <action android:name="android.intent.action.VIEW" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <category android:name="android.intent.category.BROWSABLE" /> 
     <data 
       android:host="www.example.com" 
       android:scheme="http" /> 
    </intent-filter>  
</activity> 

Ama tarayıcıda Bu içeriği göstermek zorunda bazı durumlarda

, bu yüzden: Ben amaç filtresini var uygulamanın içinden "example.com/product/123" içeriğini göstermek için Daha hızlı yapmak ve kullanıcıyı uygulamanın içinde tutmak için sekmeler. Birlikte özel sekmelerde URL'yi gösterecek niyet oluşturucu kullanmaya çalıştı:

new CustomTabsIntent.Builder().build().launchUrl(activity, url);

Ama Uygulamamı ve cihazdaki tüm tarayıcıların iletişim '... kullanarak tamamla' Beni gösterir. Uygulamamı seçersem, döngü içine atlar ve iletişim kutusunu tekrar gösterir, ancak kromu seçersem beklendiği gibi çalışır.

Buradaki soru, Chrome Özel Sekmeleri için müstehcen niyeti nasıl oluşturabilir?

cevap

10

Sen setPackage kullanabilirsiniz:

String PACKAGE_NAME = "com.android.chrome"; 

CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder().build(); 
customTabsIntent.intent.setData(uri); 

PackageManager packageManager = getPackageManager(); 
List<ResolveInfo> resolveInfoList = packageManager.queryIntentActivities(customTabsIntent.intent, PackageManager.MATCH_DEFAULT_ONLY); 

for (ResolveInfo resolveInfo : resolveInfoList) { 
    String packageName = resolveInfo.activityInfo.packageName; 
    if (TextUtils.equals(packageName, PACKAGE_NAME)) 
     customTabsIntent.intent.setPackage(PACKAGE_NAME); 
} 

customTabsIntent.launchUrl(this, uri); 
+0

Peki 45 öncesinde krom sürümleri hakkında telefonumda iyi çalışıyor? –

+0

45 önceki sürümü ile doğrudan bağımsız bir Chrome tarayıcısında açık –

+0

Harika, bu açık önce paketi kontrol etmek için bazı ekstra kod eklerim, ama bu yaklaşım harika, teşekkür ederim! –

6

Ben @Mattia MAESTRINI en Yanıt kullandık, ama bazı biz zaten yüklemiş

değiştirmek zorunda olabileceğini düşünüyorum son Chrome (2016 8 Ağustos Güncelleme) benim Nexus 5 (6.0.1)

ama resolveInfoList içine Krom Paketi "com.android.chrome" almıyorum, ben o zaman telefonuma

üzerinde iyi çalışıyor, değişiklikleri yapmak zorunda sorguda yukarıdaki
packageManager.queryIntentActivities(customTabsIntent.intent, PackageManager.MATCH_DEFAULT_ONLY); 

bana kodunun üzerinde test ettik

 String PACKAGE_NAME = "com.android.chrome"; 

     CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder().build(); 
     customTabsIntent.intent.setData(Uri.parse(url)); 

     PackageManager packageManager = getPackageManager(); 
     List<ApplicationInfo> resolveInfoList = packageManager.getInstalledApplications(PackageManager.GET_META_DATA); 

     for (ApplicationInfo applicationInfo : resolveInfoList) { 
      String packageName = applicationInfo.packageName; 
      if (TextUtils.equals(packageName, PACKAGE_NAME)) { 
       customTabsIntent.intent.setPackage(PACKAGE_NAME); 
       break; 
      } 
     } 

     customTabsIntent.launchUrl(this, Uri.parse(url)); 

Chrome

adını paketlemek veren yok ve

İlgili konular