Es wurde keine Aktivität für Intent: android.intent.action.VIEW gefunden


97

Dies ist mein Code zum Abspielen der aufgenommenen Audio-3GP-Datei

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

Beim Ausführen auf meinem HTC-Gerät (Android 2.2 Froyo) wird jedoch eine Ausnahme angezeigt:

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)

In Galaxy Tablet funktioniert es gut. Wie kann ich dieses Problem beheben?


1
Liegt es daran, dass Ihre Datei eine .3gp-Datei ist und Sie das System anweisen, MP3-Daten abzuspielen?
Blundell

@Blundell Ich habe versucht, mit 3gp BT noch die Ausnahme wird geworfen
Jennifer

Antworten:


154

Vor URL-Adressen muss http: // stehen

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

löst eine ActivityNotFoundException aus. Wenn Sie "http: //" voranstellen, ist das Problem behoben.

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

Kann OP nicht helfen, aber ich bin hier gelandet und habe nach der gleichen Ausnahme gesucht und vielleicht hilft es anderen.


8
Hervorragend! Das Schema ist ein Muss. file://in meinem Fall fehlte , bis ich geändert Uri.parse()zu Uri.fromFile().
Stan

@ Stan Danke für die Lösung
Serg Burlaka

Ich hatte ein Problem, als die URL verschlüsselt wurde. Beachten Sie also, dass Sie dies möglicherweise tun müssenUri.parse(Uri.decode(encodedString))
hmac

39

Wenn Sie auch diese Fehlermeldung erhalten, wenn Sie versuchen, eine Webseite über Ihre Android-App zu öffnen, liegt dies daran, dass Ihre URL folgendermaßen aussieht:

www.google.com

anstelle von: https://www.google.comoderhttp://www.google.com

Fügen Sie diesen Code Ihrer Aktivität / Ihrem Fragment hinzu:

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

Gib einfach deine URL an weiter openWebPage(). Wenn bereits ein Präfix vorangestellt ist https://oder http://Sie bereit sind, kann die if-Anweisung dies für Sie erledigen


34

Dies ist der richtige Weg.

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

Sie müssen import android.webkit.MimeTypeMap importieren;


Dies ist der lange Weg, um es zu tun: d
umerk44

1
Es ist normalerweise keine gute Idee, so viel Code mit allgemeinen Ausnahmen in einen Try-Block zu packen. Das Verhalten hier ist völlig undefiniert - können Sie auf einen Blick erkennen, welche Eingaben eine Nachricht drucken? Welche Ausnahmen werden auftreten und warum? Dies ist ein Zeichen für Code, der nicht gründlich getestet wurde.
jbass

19

Für mich beim Versuch, einen Link zu öffnen:

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

Ich habe den gleichen Fehler bekommen android.content.ActivityNotFoundException: No Activity found to handle Intent

Das Problem war, dass ich keine App hatte, die URLs (dh Browser) öffnen kann, die auf meinem Telefon installiert sind. Nach der Installation eines Browsers wurde das Problem behoben.

* Lektion: Stellen Sie sicher, dass mindestens eine App vorhanden ist, die die von Ihnen angerufene Absicht verarbeitet. *


6
Wie können wir mit dieser Situation umgehen?
Nikhil

Ohne ein benutzerdefiniertes Testgerät mit einem benutzerdefinierten ROM haben Sie eine Internetaktivität. Das klingt überhaupt nicht richtig.
StarWind0

Ich habe das gleiche Problem, das von einem Kunden gemeldet wird. Es scheint also einige Geräte zu geben, auf denen kein Standard-Internetbrowser installiert ist. Wie kann man das lösen?
Abhijit

Den Fehler abfangen und eine Info / einen Dialog / einen Toast geben, dass sie keinen funktionierenden Browser haben?
Erluxman

1
Siehe eine Lösung stackoverflow.com/questions/22479211/… . In diesem Fall wissen Sie, ob ein Gerät einen Standardbrowser enthält (oder eine Anwendung, die einen Deep Link verarbeitet).
CoolMind

17

Die Antwort von Maragues brachte mich dazu, die Logcat-Ausgabe zu überprüfen. Es scheint, dass dem Pfad, den Sie an Uri übergeben, ein Präfix vorangestellt werden muss
file:/

Da es sich um einen lokalen Pfad zu Ihrem Speicher handelt.

Vielleicht möchten Sie auch den Pfad selbst betrachten.

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

Der Einhängepunkt scheint im vollständigen Pfad zweimal zu erscheinen.


Dies scheint die richtige Antwort zu sein, aber die Frage ist alt und OP wurde zuletzt vor fast 2 Monaten gesehen
Maragues

Das habe ich getan. Leider habe ich diese Antwort erst gelesen, nachdem ich die Lösungen gefunden hatte :)
Janis Peisenieks

10

Wenn Sie nicht die richtige Web-URL übergeben und keinen Browser haben, tritt ActivityNotFoundException auf. Überprüfen Sie diese Anforderungen, oder behandeln Sie die Ausnahme explizit. Das kann Ihr Problem lösen.

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

Ich hatte das gleiche Problem, also habe ich mir die Absicht angesehen, die in LogCat protokolliert wird. Beim Anzeigen des Videos aus der Galerie wurde dieselbe Intent.View-Absicht aufgerufen, der Typ wurde jedoch auf "audio / *" gesetzt, wodurch mein Problem behoben wurde und kein Import von MimeTypeMap erforderlich ist. Beispiel:

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

1
Funktioniert auch für Videos bei Verwendung von intent.setDataAndType (data, "video / *") ;
Nestor

3

Hatte diese Ausnahme sogar geändert

"Audio/*"

Aber danke an @Stan, ich habe eine sehr einfache, aber nützliche Lösung gefunden:

Uri.fromFile(File(content)) stattdessen Uri.parse(path)

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

Hoffe, es hilft jemandem, sein Problem zu beheben.


3

Wenn Sie diesen Fehler in Ihrem Logcat haben, verwenden Sie diesen Code, der mir hilft

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

ebenfalls

   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

Versuchen Sie zuerst diesen Code in AndroidManifest

  <application>

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

Wenn dieser Code funktioniert, ist das in Ordnung. Aber wenn nicht. Probieren Sie diesen Code aus, aus welcher Klasse Sie die Daten oder die URL übergeben möchten.

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

Hoffe das wird dein Problem lösen. Danke dir


1

Ich habe zwei Ideen:

Erstens: Wenn Sie eine 3GP-Datei abspielen möchten, sollten Sie die MIME-Typen "Audio / 3Gpp" oder "Audio / MPEG" verwenden.

Und zweitens: Sie verwenden Methode versuchen , setData(data)für intentohne MIME - Typ.

Hoffe das hilft.


weiterhin die Ausnahme 05-04 17: 30: 30.022: WARN / System.err (4937): android.content.ActivityNotFoundException: Keine Aktivität für Intent gefunden {act = android.intent.action.VIEW dat = / mnt / sdcard / Audio-android.3gp} wird
angezeigt

Unterstützt Android Ihre 3GP-Datei? developer.android.com/guide/appendix/media-formats.html
Pasha

1

Diese Ausnahme kann ausgelöst werden, wenn Sie Deep linkingeinen Browser behandeln oder eine URL verwenden, wenn keine Standardeinstellung installiert ist. Bei Deep Linking ist möglicherweise keine Anwendung installiert, die einen Link im Format verarbeiten kann myapp://mylink.

Sie können die Mandarinenlösung für API bis zu 29 verwenden:

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()
    }
}

Für API> = 30 siehe intent.resolveActivity gibt in API 30 null zurück .


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.