2012-08-01 10 views
8

जब मैं एंड्रॉइड ब्राउज़र में एक स्थानीय HTML - फ़ाइल खोलने का प्रयास करता हूं तो मुझे एक अजीब त्रुटि आ रही है।एंड्रॉइड: स्थानीय एचटीएमएल खोलने की कोशिश करते समय गतिविधि को कुछ डिवाइसों पर अपवाद नहीं मिला - ब्राउज़र में फ़ाइल

android.content.ActivityNotFoundException: Unable to find explicit activity class {com.android.browser/com.android.browser.BrowserActivity}; have you declared this activity in your AndroidManifest.xml? 

क्या वास्तव में अजीब बात है के लिए मुझे तथ्य यह है कि इस त्रुटि को सभी उपकरणों पर नहीं होती है IST: त्रुटि तब होती है कि एक गतिविधि नहीं मिला अपवाद नहीं है। यह केवल निम्नलिखित उपकरणों पर आता है:

  • सैमसंग गैलेक्सी नेक्सस मैं (4.1.1)
  • सैमसंग गैलेक्सी नेक्सस द्वितीय (4.1.1)
  • सोनी टैबलेट एस (4.0.3)

मैं निम्नलिखित उपकरणों पर सफलतापूर्वक अपना कोड का परीक्षण किया है:

  • सैमसंग गैलेक्सी एसआई (4.1.1)
  • Samsung Galaxy S III
  • HTC एक एक्स
  • एचटीसी डिजायर एस
  • सैमसंग गैलक्सी एस प्लस (2.3.3)
  • Samsung Galaxy Tab 10.1N
  • एंड्रॉयड 2.3.3 से लेकर संस्करण के साथ
  • AVDs 4.1.0

आखिरकार यह कोड है जिसका उपयोग मैं अपने एचटीएमएल - फ़ाइल को एंड्रॉइड ब्राउज़र के साथ खोलने के लिए कर रहा हूं। मैंने कुछ कोडों को छोड़कर, इस कोड के कई क्रमपरिवर्तनों का परीक्षण किया है, लेकिन वे सभी का एक ही प्रभाव है। जैसे ही मैं घटक या कक्षा सेट करता हूं, मुझे उपरोक्त अपवाद मिल रहा है।

Uri uri = Uri.parse(filePath); 
Intent browserIntent = new Intent(Intent.ACTION_VIEW); 
browserIntent.setComponent(new ComponentName("com.android.browser", "com.android.browser.BrowserActivity")); 
browserIntent.setDataAndType(uri, "text/html"); 
browserIntent.addCategory(Intent.CATEGORY_BROWSABLE); 
context.startActivity(browserIntent); 

मैं भी कोशिश की है

browserIntent.setClassName("com.android.browser", "com.android.browser.BrowserActivity"); 
बजाय

browserIntent.setComponent(new ComponentName("com.android.browser", "com.android.browser.BrowserActivity")); 

लेकिन एक ही प्रभाव के साथ ...

किसी एक विचार यह क्यों हो रहा है है, मैं कर रहा हूँ कुछ भूल रहा हूं? मैं इस पर दिनों के लिए खोज की है, लेकिन कुछ भी है कि मेरी समस्या हल नहीं ढूंढ सका ...

धन्यवाद अग्रिम में एक बहुत, चियर्स

+0

मैं Intent.ACTION_SENDTO साथ और सैमसंग गैलेक्सी नेक्सस मैं (4.1.1) पर startActivity (Intent.createChooser()) के साथ एक चयनकर्ता बनाने का प्रयास कर ही त्रुटियां मिली थीं। समाधान नहीं मिला है। – ThanksMister

उत्तर

14

संभव में com.android.browser.BrowserActivity की तरह कोई किसी भी गतिविधि है, क्योंकि हो सकता है वहाँ उन उपकरणों, इसका डिवाइस निर्माता पर निर्भर करता है कि वे देशी ब्राउज़र एप्लिकेशन (गतिविधि का नाम और पैकेज नाम) कैसे लागू करते हैं।

तो संभव समाधान, है

PackageManger का उपयोग करना और Intent आप विशिष्ट उद्देश्य श्रेणी के लिए जाँच कर सकते हैं की तरह, Intent.CATEGORY_BROWSABLE किसी भी आवेदन के लिए उपलब्ध है, यदि उपलब्ध हो तो ComponentName है कि आवेदन की स्थापना की।

या, आप घटक का नाम, जैसे निर्दिष्ट नहीं करते,

browserIntent.setComponent(new ComponentName("com.android.browser", "com.android.browser.BrowserActivity")); 

देना उपयोगकर्ता

तो बस कोड है, का चयन करने के, जो गतिविधि यह पेज खुल जाएगा है,

Uri uri = Uri.parse(filePath); 
Intent browserIntent = new Intent(Intent.ACTION_VIEW); 
browserIntent.setDataAndType(uri, "text/html"); 
browserIntent.addCategory(Intent.CATEGORY_BROWSABLE); 
context.startActivity(browserIntent); 
+0

लेकिन com.android.browser.browserActivity ब्राउज़र के लिए मानक गतिविधि नहीं है? तो इसे Google द्वारा कार्यान्वित किया जाना चाहिए ... मैंने उपयोगकर्ता को एक विकल्प देने के लिए आपके कोड का परीक्षण किया है: ब्राउज़रहेल्पर (13717): ब्राउज़र गतिविधि शुरू करने में त्रुटि: इरादा – Henning

+0

डिवाइस निर्माता को नियंत्रित करने के लिए कोई गतिविधि नहीं मिली है ** ब्राउज़र एप्लिकेशन का स्रोत कोड ** और सुविधाओं को जोड़ने के लिए उनकी आवश्यकता के अनुसार कार्यान्वित करें .. ** ब्राउज़र सक्रियता ** केवल Google स्रोत कोड के लिए है। – user370305

+0

@ हेनिंग, जरूरी नहीं। एंड्रॉइड एक ओपन सोर्स प्रोजेक्ट है। निर्माता अपने तरीके से जा सकता है। –

1

आप एक घटक निर्दिष्ट क्यों कर रहे हैं? इसे अपने इरादे से बाहर छोड़ दें और आपको ठीक होना चाहिए; कार्रवाई, श्रेणी और डेटा/प्रकार पर्याप्त हैं।

+0

निर्दिष्ट नहीं घटक या कक्षा हमेशा मुझे एक अपवाद की ओर ले जाती है कि मुझे बता रहा है कि सिस्टम को मेरे इरादे को संभालने के लिए एक एसीविटी नहीं मिल सका – Henning

+0

आपकी यूआरआई योजना क्या है? – avimak

7
कुछ परिदृश्य में

आप के बजाय दे उपयोगकर्ता एक चुना के देशी ब्राउज़र का उपयोग करने, यह कैसे मैं अलग पैकेज नाम से ActivityNotFoundException से बचने के लिए किया है चाहते हो सकता है, उम्मीद है कि इस मदद मिलेगी :)

Intent browserIntent = new Intent(Intent.ACTION_VIEW); 
PackageManager packageManager = currentActivity.getPackageManager(); 
Uri uri = Uri.parse(url); 
browserIntent.setDataAndType(uri, "text/html"); 
List<ResolveInfo> list = packageManager.queryIntentActivities(browserIntent, 0); 
for (ResolveInfo resolveInfo : list) { 
    String activityName = resolveInfo.activityInfo.name; 
    if (activityName.contains("BrowserActivity")) { 
     browserIntent = 
       packageManager.getLaunchIntentForPackage(resolveInfo.activityInfo.packageName); 
     ComponentName comp = 
       new ComponentName(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name); 
     browserIntent.setAction(Intent.ACTION_VIEW); 
     browserIntent.addCategory(Intent.CATEGORY_BROWSABLE); 
     browserIntent.setComponent(comp); 
     browserIntent.setData(uri); 
    } 
} 
+0

मोबाइल में किसी भी मौजूदा ब्राउज़र से यूआरएल खोजने और खोलने का यह अच्छा तरीका है (** यदि पैकेज और क्लास नाम ज्ञात है **) और ** ActivityNotFoundException अपवाद ** से भी बचें। – amardeep

4

क्यों यह निर्धारित करने के लिए कि कौन सा ऐप उपयोग करना है, सिस्टम को छोड़ दें? यदि मेरे पास (उदाहरण के लिए) क्रोम स्थापित है और क्रोम का उपयोग करने के लिए perfer है, तो मैं थोड़ा परेशान होगा कि आपने डिफ़ॉल्ट ब्राउज़र को मुझ पर मजबूर कर दिया है।

यह काम करना चाहिए:

final Uri uri = Uri.parse(filePath); 
Intent browserIntent = new Intent(Intent.ACTION_VIEW, uri); 
browserIntent.addCategory(Intent.CATEGORY_BROWSABLE); 
context.startActivity(browserIntent); 
संबंधित मुद्दे