2012-06-06 10 views
29

Ich suche eine Tätigkeit in meiner app mit einer benutzerdefinierten Aktion zu starten. Ich habe ein paar Antworten, aber alles fand ich versuchen, es wirft java.lang.RuntimeException No Activity sagen gefunden Intent {act = com.example.foo.bar.YOUR_ACTION} zu handhaben. Start-Aktivität mit dem benutzerdefinierten Aktion

Dies ist die Aktivität in meiner Manifest-Datei:

<activity 
    android:name=".FeedbackActivity" > 
    <intent-filter> 
     <action android:name="com.example.foo.bar.YOUR_ACTION" /> 
    </intent-filter> 
</activity> 

Und das ist, wie ich die Aktivität fange:

Intent intent = new Intent("com.example.foo.bar.YOUR_ACTION"); 
startActivity(intent); 

Jede Hilfe wäre sehr geschätzt.

+0

Post your Manifest – FoamyGuy

+0

Ich denke, Sie sollten Maks Antwort als die richtige markieren (als Referenz für die anderen Benutzer) – Kzar

+0

Eigentlich soll eine Antwort als akzeptiert bedeuten, dass es für die OP funktionierte, nicht unbedingt dass es die beste Antwort für jeden anderen ist - dafür gibt es Upvotes. – Cullub

Antwort

22

Ich glaube, Sie erstellen Ihre Absicht falsch. Versuchen Sie wie folgt aus:

String CUSTOM_ACTION = "com.example.foo.bar.YOUR_ACTION"; 

//Intent i = new Intent(this, FeedBackActivity.class); // <--- You might need to do it this way. 
Intent i = new Intent(); 
i.setAction(CUSTOM_ACTION); 

startActivity(i); 
+0

Ich bekomme keine Ausnahme mehr, aber es zeigt nur einen Bildschirm für den Benutzer, um eine App auszuwählen, um die Aktion abzuschließen. –

+0

ist Ihre App in der Liste? – FoamyGuy

+0

Was ist 'listIntent' in Ihrem Code? Meinst du "ich"? – Karu

80

Ich denke, was Sie brauchen, ist eine Standardkategorie zu Ihren Intent-Filter hinzuzufügen, zB.

<activity 
    android:name=".FeedbackActivity" > 
    <intent-filter> 
     <action android:name="com.example.foo.bar.YOUR_ACTION" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</activity> 

siehe this answer für weitere Informationen.

+3

Dies ist die richtige Antwort und soll als so markiert werden. – David

+0

Ja! Danke Kumpel :) – yahya

1

Fügen Sie einfach und Intent-Filter Kategorie als Standard.

Implizite Absicht funktioniert perfekt und in vielen Fällen ist es besser, eine implizite Absicht mit Intent-Aktion zu verwenden, um einen Dienst/Aktivität zu nennen als Klassennamen.

Vor startActivty()/startService() mit dem richtigen Kontext verwenden Sie diese Methode 'queryIntentActivities(Intent intent, int flags)' von Paket-Manager-Klasse.

Es hilft, die Activitymanager (verantwortlich für die Aktivitäten starten) zu prüfen, ob das Android-System wird immer jedes Spiel mit Ihnen Intent.

Wenn nicht, gibt es eine Liste Größe 0 oder> 0 zurück.

Dadurch können Sie auch überprüfen, ob Ihre App den Anruf erhält, und in diesem Fall, auch wenn Ihre App nicht installiert ist/ein Problem hat, wird es nicht abstürzen, sondern wird eine Warnung in Log werfen. Benutzer werden keine großen Probleme haben, abgesehen davon, dass die App nicht gestartet wird.

(Benutzer nie verzeihen, wenn Tour App stürzt ab).

Hope this helfen !!! Glückliche Kodierung. :)

Verwandte Themen