2012-06-06 14 views
29

Sto cercando di avviare un'attività nella mia app utilizzando un'azione personalizzata. Ho trovato alcune risposte ma tutto ciò che ho provato genera java.lang.RuntimeException dicendo No Activity trovato per gestire Intent {act = com.example.foo.bar.YOUR_ACTION}.Avvia attività utilizzando l'azione personalizzata

Questa è l'attività nel mio file manifesto:

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

e questo è come sto iniziando l'attività:

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

Qualsiasi aiuto sarebbe molto apprezzato.

+0

post your manifest – FoamyGuy

+0

Penso che dovresti contrassegnare la risposta di Maks come corretta (per riferimento agli altri utenti) – Kzar

+0

In realtà, contrassegnare una risposta come accettata significa che ha funzionato per l'OP, non necessariamente che è la migliore risposta per tutti gli altri - questo è ciò per cui sono rivolti gli upvotes. – Cullub

risposta

22

Penso che tu stia creando il tuo intento sbagliato. Prova in questo modo:

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

Non ricevo più un'eccezione, ma mostra semplicemente una schermata per consentire all'utente di selezionare un'app per completare l'azione. –

+0

è la tua app nella lista? – FoamyGuy

+0

Che cos'è 'listIntent' nel codice? Intendi 'i'? – Karu

80

penso che ciò che è necessario è quello di aggiungere una categoria predefinita per il vostro intento-filtro, ad es.

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

vedere this answer per ulteriori informazioni.

+3

Questa è la risposta corretta e deve essere contrassegnata come tale. – David

+0

Sì! Grazie compagno :) – yahya

1

Basta aggiungere e intento-filtro categoria come predefinito.

L'intento implicito funziona perfettamente e in molti casi è meglio utilizzare un intento implicito con Intent-action per chiamare un servizio/attività rispetto all'utilizzo del nome della classe.

Prima del startActivty()/startService() con il contesto corretto, si utilizza questo metodo 'queryIntentActivities(Intent intent, int flags)' dalla classe del gestore pacchetti.

Aiuta il ActivityManager (responsabile delle attività di lancio) a verificare se il sistema Android sta ottenendo qualsiasi corrispondenza con l'intenzione dell'utente.

Se non restituisce una lista dimensione 0 oppure> 0.

Da questo puoi anche controllare se la tua app sta ricevendo la chiamata, e in questo caso anche se la tua app non è installata/ha qualche problema, non si bloccherà ma genererà un avviso in Log. Gli utenti non dovranno affrontare grossi problemi a parte l'app non avviata.

(gli utenti non ti perdoneranno mai se l'app tour si blocca).

Spero che questo possa aiutare !!! Happy Coding. :)

Problemi correlati