इरादे को संभालने के लिए कोई गतिविधि नहीं मिली: android.intent.action.VIEW


97

यह मेरा कोड रिकॉर्डेड ऑडियो 3gp फाइल को चलाने के लिए है

 Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
        Uri data = Uri.parse(path);
        intent.setDataAndType(data, "audio/mp3");
        startActivity(intent);

लेकिन इसे मेरे HTC डिवाइस में चलाने के दौरान (Android 2.2 Froyo) एक अपवाद दिखाता है:

05-04 16:37:37.597: WARN/System.err(4065): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=/mnt/sdcard/mnt/sdcard/audio-android.3gp typ=audio/mp3 }
05-04 16:37:37.597: WARN/System.err(4065):     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1567)
05-04 16:37:37.597: INFO/ActivityManager(92): Starting activity: Intent { act=android.intent.action.VIEW dat=/mnt/sdcard/mnt/sdcard/audio-android.3gp typ=audio/mp3 }
05-04 16:37:37.607: WARN/System.err(4065):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1537)
05-04 16:37:37.607: WARN/System.err(4065):     at android.app.Activity.startActivityForResult(Activity.java:2858)
05-04 16:37:37.607: WARN/System.err(4065):     at android.app.Activity.startActivity(Activity.java:2964)
05-04 16:37:37.607: WARN/System.err(4065):     at com.ey.camera.AudioRecorder.playAudio(AudioRecorder.java:244)
05-04 16:37:37.607: WARN/System.err(4065):     at com.ey.camera.AudioRecorder$4.onClick(AudioRecorder.java:225)
05-04 16:37:37.607: WARN/System.err(4065):     at android.view.View.performClick(View.java:2408)
05-04 16:37:37.607: WARN/System.err(4065):     at android.view.View$PerformClick.run(View.java:8817)
05-04 16:37:37.607: WARN/System.err(4065):     at android.os.Handler.handleCallback(Handler.java:587)
05-04 16:37:37.607: WARN/System.err(4065):     at android.os.Handler.dispatchMessage(Handler.java:92)
05-04 16:37:37.607: WARN/System.err(4065):     at android.os.Looper.loop(Looper.java:144)
05-04 16:37:37.607: WARN/System.err(4065):     at android.app.ActivityThread.main(ActivityThread.java:4937)
05-04 16:37:37.607: WARN/System.err(4065):     at java.lang.reflect.Method.invokeNative(Native Method)
05-04 16:37:37.607: WARN/System.err(4065):     at java.lang.reflect.Method.invoke(Method.java:521)
05-04 16:37:37.607: WARN/System.err(4065):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-04 16:37:37.607: WARN/System.err(4065):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-04 16:37:37.607: WARN/System.err(4065):     at dalvik.system.NativeStart.main(Native Method)

गैलेक्सी टैबलेट में यह ठीक काम कर रहा है। मेरे द्वारा इस समस्या का समाधान कैसे किया जा सकता है?


1
क्या ऐसा इसलिए है क्योंकि आपकी फ़ाइल a .3gp है और आपका सिस्टम mp3 खेलने का सिस्टम बता रहा है?
ब्लंडेल

@ ब्लंडेल मैंने कोशिश की 3gp bt के साथ अभी भी अपवाद को फेंक दिया गया है
जेनिफर

जवाबों:


154

यूआरएल पते http: // से पहले होने चाहिए

Uri uri = Uri.parse("www.google.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);

एक गतिविधिNotFoundException फेंकता है। यदि आप "http: //" प्रस्तुत करते हैं, तो समस्या हल हो गई है।

Uri uri = Uri.parse("http://www.google.com");

ओपी की मदद नहीं कर सकता, लेकिन मैंने यहां एक ही अपवाद की खोज की और शायद यह दूसरों की मदद करता है।


8
उत्तम! योजना एक जरूरी है। file://मेरे मामले में गायब था जब तक मैं बदल नहीं Uri.parse()गया Uri.fromFile()
स्टेन

समाधान के लिए @Stan thanx
सर्ग

मुझे एक समस्या हो रही थी जब url एन्कोड हो गया था, इसलिए ध्यान दें कि आपको करने की आवश्यकता हो सकती हैUri.parse(Uri.decode(encodedString))
hmac

40

यदि आपको अपने एंड्रॉइड ऐप से वेब पेज खोलने की कोशिश करते समय यह त्रुटि हो रही है, तो यह इसलिए है क्योंकि आपका यूआरएल इस तरह दिखता है:

www.google.com

के बजाय: https://www.google.comयाhttp://www.google.com

इस कोड को अपनी गतिविधि / फ़्रैगमेंट में जोड़ें:

 public void openWebPage(String url) {

    Uri webpage = Uri.parse(url);

    if (!url.startsWith("http://") && !url.startsWith("https://")) {
        webpage = Uri.parse("http://" + url);
    }

    Intent intent = new Intent(Intent.ACTION_VIEW, webpage);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

बस अपने यूआरएल को पास करें openWebPage()। यदि यह पहले से ही उपसर्ग है https://या http://फिर आप जाने के लिए अच्छे हैं, अन्यथा यदि कथन आपके लिए संभालता है


34

यह इसे करने का सही तरीका है।

    try
    {
    Intent myIntent = new Intent(android.content.Intent.ACTION_VIEW);
    File file = new File(aFile.getAbsolutePath()); 
    String extension = android.webkit.MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(file).toString());
    String mimetype = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
    myIntent.setDataAndType(Uri.fromFile(file),mimetype);
    startActivity(myIntent);
    }
    catch (Exception e) 
    {
        // TODO: handle exception
        String data = e.getMessage();
    }

आपको आयात करने की आवश्यकता है android.webkit.MimeTypeMap;


यह करने का लंबा तरीका है: d
umerk44

1
सामान्य अपवाद के साथ एक कोशिश ब्लॉक में इतना कोड लपेटना आमतौर पर एक अच्छा विचार नहीं है। यहां व्यवहार पूरी तरह से अपरिभाषित है - क्या आप बता सकते हैं कि कौन से इनपुट एक संदेश को एक नज़र में प्रिंट करेंगे? क्या अपवाद उत्पन्न होंगे, और क्यों? यह कोड का एक संकेत है जिसे पूरी तरह से परीक्षण नहीं किया गया है।
22

19

मेरे लिए एक लिंक खोलने की कोशिश करते समय:

Uri uri = Uri.parse("https://www.facebook.com/abc/");
                Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                startActivity(intent);

मुझे भी यही त्रुटि मिली android.content.ActivityNotFoundException: No Activity found to handle Intent

समस्या यह थी क्योंकि मेरे पास कोई ऐसा ऐप नहीं था जो मेरे फ़ोन में स्थापित URL (यानी ब्राउज़र) खोल सके। इसलिए एक ब्राउज़र स्थापित करने के बाद समस्या हल हो गई थी।

* पाठ: सुनिश्चित करें कि कम से कम एक ऐप है जो आपके द्वारा कॉल किए जा रहे इरादे को संभालता है *


6
तो हम इस स्थिति को कैसे संभाल सकते हैं?
निखिल

कस्टम ROM के साथ एक कस्टम टेस्ट डिवाइस के बिना, आपके पास एक इंटरनेट गतिविधि होगी। यह बिल्कुल सही नहीं लगता है।
StarWind0

मैं एक ग्राहक द्वारा रिपोर्ट की जा रही एक ही समस्या है। तो ऐसा लगता है कि कुछ डिवाइस हैं जिन पर कोई डिफ़ॉल्ट इंटरनेट ब्राउज़र स्थापित नहीं है। इसे कैसे हल करें?
अभिजीत

त्रुटि को पकड़ें और एक जानकारी / संवाद / टोस्ट दें कि उनके पास काम करने वाला ब्राउज़र नहीं है?
एर्लक्समैन

1
एक समाधान stackoverflow.com/questions/22479211/… देखें । इस स्थिति में आपको पता चल जाएगा कि क्या किसी डिवाइस में एक डिफ़ॉल्ट ब्राउज़र (या एक एप्लिकेशन जो एक डीप लिंक को संसाधित करता है) है।
कूलमाइंड

17

Maragues के जवाब ने मुझे लॉगकैट आउटपुट की जाँच करने को कहा। प्रकट होता है कि आप उरी से गुजरने वाले मार्ग के साथ उपसर्ग करने की आवश्यकता है
file:/

चूंकि यह आपके भंडारण का एक स्थानीय रास्ता है।

आप चाहते हैं कि आप खुद भी रास्ता देखें।

`05-04 16:37:37.597: WARN/System.err(4065): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=/mnt/sdcard/mnt/sdcard/audio-android.3gp typ=audio/mp3 }`

पूर्ण बिंदु में दो बार माउंट बिंदु दिखाई देता है।


यह सही उत्तर लगता है, लेकिन सवाल पुराना है और ओपी को आखिरी बार लगभग 2 महीने पहले देखा गया था
मार्ग

यह जो मैंने किया है। अफसोस की बात यह है कि मैंने इसका जवाब केवल पढ़ने के बाद ही हल ढूंढ लिया :)
Janis Peisenieks

10

यदि आप सही वेब URL पास नहीं करते हैं और आपके पास ब्राउज़र नहीं है, तो ActivNotFoundException होती है, इसलिए उन आवश्यकताओं की जाँच करें या अपवाद को स्पष्ट रूप से संभालें। जो आपकी समस्या का समाधान कर सकता है।

public static void openWebPage(Context context, String url) {
    try {
        if (!URLUtil.isValidUrl(url)) {
            Toast.makeText(context, " This is not a valid link", Toast.LENGTH_LONG).show();   
        } else {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(url));
            context.startActivity(intent);
        }
    } catch (ActivityNotFoundException e) {
        Toast.makeText(context, " You don't have any browser to open web page", Toast.LENGTH_LONG).show();
    }
}


3

मेरे पास यही मुद्दा था, इसलिए मैं उस इरादे को देख रहा था जो लॉगकट में लॉग इन है। गैलरी से वीडियो देखने के दौरान, यह उसी इरादे को देखता है। देखें इरादे, लेकिन टाइप करें "ऑडियो / *", जो मेरे मुद्दे को तय करता है, और MimeTypeMap आयात करने की आवश्यकता नहीं है। उदाहरण:

Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
Uri data = Uri.parse(path);
intent.setDataAndType(data, "audio/*");
startActivity(intent);

1
आशय का उपयोग करते समय वीडियो के लिए भी काम करता है। डेटाडॉटएंडटाइप (डेटा, "वीडियो / *") ;
नेस्टर

3

इस अपवाद को भी बदल दिया गया था

"ऑडियो / *"

लेकिन thanx @ @ स्टान के लिए मैं बहुत ही सरल लेकिन उपयोगी समाधान निकला हूं:

Uri.fromFile(File(content)) बजाय Uri.parse(path)

 val intent =Intent(Intent.ACTION_VIEW)
                    intent.setDataAndType(Uri.fromFile(File(content)),"audio/*")
                    startActivity(intent)

आशा है कि यह किसी को उसकी समस्या को ठीक करने में मदद करता है।


3

अगर आपके logcat में ये त्रुटि है तो इन कोड का उपयोग करें यह मेरी मदद करता है

 Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setDataAndType(Uri.fromFile(new File(data.getLocation())), "audio/*");
            try {
                context.startActivity(intent);
            } catch (ActivityNotFoundException e) {
                Log.d("error", e.getMessage());
            }

भी

   Intent intent = new Intent(MediaStore.INTENT_ACTION_MUSIC_PLAYER);
            intent.setDataAndType(Uri.fromFile(new File(data.getLocation())), "audio/*");
            try {
                context.startActivity(intent);
            } catch (ActivityNotFoundException e) {
                Log.d("error", e.getMessage());
            }

2

सबसे पहले इस कोड को AndroidManifest के अंदर आज़माएं

  <application>

    <uses-library
        android:name="org.apache.http.legacy"
        android:required="false" />
 </application>

यदि यह कोड काम करता है, तो ठीक है। लेकिन अगर नहीं। इस कोड को आज़माएं कि आप किस कक्षा से डेटा या यूरी पास करना चाहते हैं।

Intent window = new Intent(getApplicationContext(), Browser.class);
window.putExtra("LINK", "http://www.yourwebsite.com");
startActivity(window);

आशा है कि यह आपकी समस्या को हल करेगा। धन्यवाद


1

मेरे पास दो विचार हैं:

पहला: यदि आप 3gp फाइल चलाना चाहते हैं तो आपको माइम प्रकार "ऑडियो / 3Gpp" या "ऑडियो / एमपीईजी" का उपयोग करना चाहिए

और दूसरा: यदि आप उपयोग विधि की कोशिश कर सकते setData(data)के लिए intentकिसी भी माइम प्रकार के बिना।

उम्मीद है की यह मदद करेगा।


अभी भी अपवाद 05-04 17: 30: 30.022: WARN / System.err (4937): android.content.ActivityNotFoundException: कोई गतिविधि नहीं पाई गई जिसे इंटेंट {अधिनियम = android.intent.action.VIEW डेटा = / mnt / sdcard / को हैंडल करना है। ऑडियो- android.3gp} दिखा रहा है
जेनिफर

क्या Android आपकी 3gp फ़ाइल का समर्थन करता है? डेवलपर
पाशा

1

Deep linkingयदि आप डिफ़ॉल्ट रूप से स्थापित नहीं हैं, तो यह अपवाद तब उठाया जा सकता है जब आप किसी ब्राउज़र के लिए संभालते हैं या URL करते हैं। डीप लिंकिंग के मामले में ऐसा कोई एप्लिकेशन इंस्टॉल नहीं किया जा सकता है जो प्रारूप में लिंक को प्रोसेस कर सके myapp://mylink

आप 29 तक एपीआई के लिए कीनू समाधान का उपयोग कर सकते हैं :

private fun openUrl(url: String) {
    val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
    val activityInfo = intent.resolveActivityInfo(packageManager, intent.flags)
    if (activityInfo?.exported == true) {
        startActivity(intent)
    } else {
        Toast.makeText(
            this,
            "No application that can handle this link found",
            Toast.LENGTH_SHORT
        ).show()
    }
}

एपीआई के लिए = = 30 इरादे देखें। समाधानएपीआई 30 में अशक्तता वापस आती है


0

जोड़ने की तरह किसी भी यूआरएल के साथ जाँच की कोशिश करो

https://www.google.com

पथ में और गतिविधि शुरू करें यदि आप की तुलना में इसके काम गलत मार्ग जोड़ रहे हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.