2010-09-16 10 views
5

Sono nuovo nello sviluppo di Android.PreferenceScreen - <intent .../> - Eccezione - FLAG_ACTIVITY_NEW_TASK

Il progetto riguarda l'implementazione di un AccountAccount Astratto con un AbstractThreadedSyncAdapter per sincronizzare determinati dati su un server con un provider di contenuti.

Ho creato tutto e sia l'aggiunta di account che la sincronizzazione sono in esecuzione senza problemi.

Ora ho provato ad aggiungere una preferenza schermo proprio come suggerito nel riferimento Android (ricerca di AbstractAccountAuthenticator, si spiega lì) tramite XML in questo modo:

autenticator.xml:

<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android" 
    android:accountType="typeOfAuthenticator" 
    android:icon="@drawable/icon" 
    android:smallIcon="@drawable/miniIcon" 
    android:label="@string/label" 
    android:accountPreferences="@xml/account_preferences" 
/> 

la preferenza-screen-XML assomiglia a questo:

account_preferences.xml:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
<PreferenceCategory android:title="@string/pref_cat_general"> 
    <PreferenceScreen android:key="@string/pref_cat_scr_keygen" android:title="@string/pref_cat_scr_keygen_title" android:summary="@string/pref_cat_scr_keygen_summary"> 
    <intent android:action="android.intent.action.VIEW" android:targetPackage="com.android.clean" android:targetClass="com.android.clean.KeygenAct" /> 
    </PreferenceScreen> 
</PreferenceCategory> 
</PreferenceScreen> 

Lo schermo è promted come dovrebbe essere, ma e questo è il problema: quando clicco sul PREFERENCE con l'intento porta ad un crash del sistema (sia nell'emulatore e il mio HTC-Desire) .

Logcat dice:

ERRORE/AndroidRuntime (18754): android.util.AndroidRuntimeException: Calling startActivity() dall'esterno di un contesto di attività richiede la bandiera FLAG_ACTIVITY_NEW_TASK. E 'questo davvero quello che vuoi?

(intero Logcat on pastebin)

Qui la parte del manifesto, in cui l'attività è definita:

<activity android:name=".KeygenAct"> 
    <intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</activity> 

L'intera prova-codice (è il mio progetto sulle cose essenziali per trovare la problema) è quello di trovare al googlecode (http://code.google.com/p/cleanproject/source/browse/) (Eclipse-Project)

Grazie già per il vostro aiuto, Esentian

p.s .: keygen non è un generatore di chiavi, significa più key_general. Un po 'inartfully espresso;)

risposta

7

Ho avuto lo stesso problema e hanno appena scoperto, che se si modificano le preferenze per:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
<PreferenceCategory android:title="@string/pref_cat_general"> 
</PreferenceCategory> 
    <PreferenceScreen android:key="@string/pref_cat_scr_keygen" android:title="@string/pref_cat_scr_keygen_title" android:summary="@string/pref_cat_scr_keygen_summary"> 
    <intent android:action="android.intent.action.VIEW" android:targetPackage="com.android.clean" android:targetClass="com.android.clean.KeygenAct" /> 
    </PreferenceScreen> 
</PreferenceScreen> 

allora funziona come previsto. Questo è strano perché mi aspetterei che PreferenceCategory raggruppi gli elementi come figli ... E perché risulta con tale errore (?) Non correlato?

+0

Grazie per la risposta! Stavo spostando le ultime settimane in un nuovo appartamento ed ero offline fino ad oggi. Questa soluzione è come una soluzione, ma grazie, ora tutto sta andando bene. – Esentian

+2

Dio dannazione, oh quel Android, semplicemente rimuovendo finalmente sta funzionando. Grazie mille! – Defuera

+0

Non funziona per me. Il PreferenceScreen non viene visualizzato se si trova al di fuori di una PreferenceCategory. –

Problemi correlati