2013-09-08 5 views
8

मैं ब्राउज़र में एक ट्विटर यूआरएल लोड करने की कोशिश कर रहा हूँ।ACTION_VIEW आशय से एक विशिष्ट एप्लिकेशन को कैसे बाहर निकालें?

मेरे फोन में, मैंने पहले ही ट्विटर ऐप इंस्टॉल कर लिया है। मैं ACTION_VIEW मंशा का उपयोग कर यूआरएल खोलने की कोशिश कर रहा हूं। लेकिन क्या होता है, जब मैं इरादा कहता हूं, एंड्रॉइड डिफ़ॉल्ट चयनकर्ता संवाद दिखाएगा, जिसमें ट्विटर ऐप भी शामिल है (यदि यह डिवाइस पर स्थापित है)। मैं केवल ब्राउज़र का उपयोग कर यूआरएल खोलना चाहता हूं। मैं ट्विटर से ट्विटर एप्लिकेशन को बाहर करना चाहता हूं। मैं डिवाइस में सभी Availaible ब्राउज़रों संवाद में दिखाना चाहते हैं, नहीं देशी अनुप्रयोगों चहचहाना की तरह, फेसबुक आदि

है यह संभव है या नहीं? यदि संभव हो तो कोई भी इसे प्राप्त करने में मेरी सहायता कर सकता है। मैं स्पष्टता के लिए इस प्रश्न के साथ अपने कोड और एक स्क्रीनशॉट को भी जोड़ रहा हूं।

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

उत्तर

3

तुम बस आशय के लिए लक्ष्य पैकेज निर्धारित करने की आवश्यकता: अगर वे कुछ कस्टम ब्राउज़र स्थापित किया है और के रूप में इस का उपयोग करना चाहते

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

हालांकि, उपयोगकर्ताओं को परेशान मेरी चूक।

आप के साथ डिफ़ॉल्ट ब्राउज़र पता लगाने का प्रयास कर सकते हैं:

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

कोई अंतर नहीं है, फिर भी यह एक ही देखने से पता चलता: इतना है कि यह एक पूर्ण समाधान है मैं इसे संशोधित कर लिया है। मैंने आपके कोड में मामूली परिवर्तन किया है। मुझे नहीं पता कि इसकी आवश्यकता है या नहीं। यह मेरे डिवाइस में लगभग सभी अनुप्रयोग दिखाता है। –

+0

यहां संशोधित कोड है। मैंने सेटिंग डेटा और प्रकार पर टिप्पणी की है। स्ट्रिंग यूआरएल = "https://twitter.com"; MimeTypeMap मानचित्र = MimeTypeMap.getSingleton(); स्ट्रिंग प्रकार = map.getMimeTypeFromExtension (यूआरएल); \t \t इरादा मैं = नया इरादा (Intent.ACTION_VIEW); \t \t //i.setType(type); \t \t //i.setData(Uri.parse(url)); \t \t // ComponentName कंप्यूटर अनुप्रयोग = नए ComponentName ("com.android.browser", "com.android.browser.BrowserActivity"); \t \t ComponentName कंप्यूटर अनुप्रयोग = नए आशय (प्रकार, Uri.parse (यूआरएल)) resolveActivity (इस getPackageManager()।)। \t \t i.setComponent (comp); \t \t i.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); \t \t प्रारंभ गतिविधि (i); –

+0

अच्छा, आपका कोड काम नहीं करेगा। पहले मेरा प्रयास करें। – flx

9

मैं एक ऐसी ही बात करने के लिए की जरूरत है और this जवाब उपयोगी पाया।

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

आप 'packageNameToHide.equals (packageName)' से पहले '!' भूल गए थे। अब यह हमेशा पैकेज के साथ खुलता है NameOfAppToHide।सुझाव के लिए – Roel

+0

@DalvikVM धन्यवाद। आप दोनों लिख रहे हैं। मैंने गलती तय की। :) – Sufian

+0

@ lf215 क्षमा करें कि इससे पहले कि मैं इसे स्वीकार कर सकूं, आपका संपादन पहले से ही खारिज कर दिया गया था। मैंने सुधार किया है। धन्यवाद। :) – Sufian

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