2015-09-18 17 views
9

एप्लिकेशन में विशिष्ट वेबसाइट की सामग्री दिखाने के लिए गतिविधि है उदा। "Example.com"। तो कुछ ऐप्लिकेशन के अंदर "example.com/product/123" की सामग्री को दिखाने के लिए मैं लक्ष्य फ़िल्टर है:क्रोम कस्टम टैब और इरादा फ़िल्टर

<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> 

लेकिन कुछ मामलों मैं ब्राउज़र में इस सामग्री दिखाने के लिए है, तो मैं क्रोम कस्टम उपयोग करने का फैसला टैब को तेज़ी से बनाने और ऐप के अंदर उपयोगकर्ता को रखने के लिए। मैं के साथ कस्टम टैब में आशय निर्माता का उपयोग करना यूआरएल को दिखाने की कोशिश की:

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

लेकिन यह 'का उपयोग कर ... क्रिया पूर्ण करें' संवाद, जहां मैं अपने अनुप्रयोग और डिवाइस पर सभी ब्राउज़रों देख मुझे पता चलता है। अगर मैं अपना ऐप चुनता हूं तो यह लूप में कूदता है और फिर से संवाद दिखाता है, लेकिन अगर मैं क्रोम चुनता हूं तो यह अपेक्षित काम करता है।

तो प्रश्न यह है कि क्रोम कस्टम टैब के लिए स्पष्ट इरादा कैसे बनाएं?

उत्तर

10

आप setPackage उपयोग कर सकते हैं:

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

तो पहले 45 क्रोम संस्करणों के बारे में क्या मेरे फोन पर ठीक काम कर रहा है? –

+0

संस्करण पूर्व 45 के साथ यह सीधे एक स्टैंडअलोन क्रोम ब्राउज़र –

+0

में खुला है, मैं इसे खोलने से पहले पैकेज को जांचने के लिए कुछ अतिरिक्त कोड जोड़ूंगा, लेकिन यह दृष्टिकोण बहुत अच्छा है, धन्यवाद! –

6

मैं @Mattia Maestrini के जवाब का इस्तेमाल किया है, लेकिन मैं कुछ हो सकता है हम

मैं पहले से ही स्थापित किया है बदलने के लिए लगता है कि नवीनतम क्रोम (अपडेट किया गया अगस्त 8, वर्ष 2016) मेरे नेक्सस में 5 (6.0.1)

लेकिन मैं क्रोम पैकेज "com.android.chrome" नहीं मिल रहा है resolveInfoList में, मैं परिवर्तन करना है, है तो यह मेरे फोन

पर ठीक काम कर रहा है
packageManager.queryIntentActivities(customTabsIntent.intent, PackageManager.MATCH_DEFAULT_ONLY); 
क्वेरी ऊपर

मुझे क्रोम

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

मैं कोड ऊपर का परीक्षण किया है के नाम पर पैकेज दे रही है नहीं करता है और यह

संबंधित मुद्दे