Intent.resolveActivity! = Null, aber die Absicht zu starten, wirft eine ActivityNotFound-Ausnahme aus

Ich stelle diese Frage hier für pädagogische Zwecke, da ich keine Antworten überall finden konnte und schließlich die Ursache für den alten Weg fand, also von mir selbst.

Hier ist der problematische Code:

  • Absichtsfilter, um alle Freigaben zu erfassen
  • Starten Sie die Anwendung aus dem Browser-URL-Schema
  • Wie benutzt man putExtra () und getExtra () für String-Daten
  • Android: Implizite Intents vs. Broadcast Receiver
  • Android hält Caching meine Intents Extras, wie man eine ausstehende Absicht, die frische Extras hält deklarieren?
  • Was ist eine Absicht in Android?
  • // initially getting the intent from polling the PackageManager about activities resolving Search intent. ComponentName componentName = intent.resolveActivity(pm); if (componentName != null) { context.startActivity(intent); } 

    Trotz der Prüfung bekomme ich eine ActivityNotFound-Ausnahme.

    EDIT: Anscheinend war der Punkt für alle nicht offensichtlich: Wie kommt es, dass es eine Aktivität gibt, die die Absicht auflöst, doch versucht es zu starten, wirft eine ActivityNotFound-Ausnahme – zwei Fakten scheinbar widersprüchlich?

  • Das Konzept einer Absicht in Android?
  • Alle Broadcast-Events auf Android anzeigen
  • Fehler beim Verwenden von onClickListener (Intent)
  • Was sind die möglichen Absichtstypen für intent.setType (type)?
  • Android beschäftigt sich mit vielen Absicht
  • Sende Daten zu einer vorherigen Aktivität zurück
  • 2 Solutions collect form web for “Intent.resolveActivity! = Null, aber die Absicht zu starten, wirft eine ActivityNotFound-Ausnahme aus”

    Von dem, was ich sehen konnte, wird intent.resolveActivity () zurückkehren, wenn es irgendeine Aktivität gibt, die diese Absicht auflöst. Auch wenn diese Aktivität nicht exportiert wird (was es für alle praktischen Zwecke unbrauchbar macht, falls es nicht aus deinem Paket geht). Android's API kümmert sich nicht um das zu erwähnen, so dass Sie es selbst herausfinden müssen, und stellen Sie sicher, dass die Aktivität, die Sie versuchen zu starten, in der Tat exportiert wird.

     ActivityInfo activityInfo = intent.resolveActivityInfo(pm, intent.getFlags()); if (activityInfo.exported) { doSomething(); } 

    EDIT: Der Punkt dieser Frage ist, dass ResolveActivity einen ComponentName zurückgibt, auch wenn activityInfo.exported == false AND es ist nicht aus deinem eigenen Paket – was macht es unlackbar, und überrascht mich die Absicht wurde gelöst und doch nicht lächerlich.

    ActivityNotFound Ausnahme wird ausgelöst, wenn ein Aufruf von startActivity(Intent) oder einer seiner Varianten fehlschlägt, da eine Activity nicht gefunden werden kann, um die gegebene Intent auszuführen. Zum Beispiel, wenn Sie versuchen, eine E-Mail zu senden, aber es gibt keine App auf Ihrem Gerät, das ACTION_SEND Intent-Aktion verarbeiten ACTION_SEND , wird ActivityNotFound geworfen.

    Eine Möglichkeit, die Ausnahme zu vermeiden, besteht darin, Folgendes zu tun:

     final ComponentName componentName = intent.resolveActivity(pm); if (componentName != null) { try { context.startActivity(intent); } catch (ActivityNotFoundException ex) { // Notify the user? } } 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.