2010-09-16 15 views
5

Soy nuevo en el desarrollo de Android.PreferenceScreen - <intent .../> - Excepción - FLAG_ACTIVITY_NEW_TASK

El proyecto trata de implementar un AbstractAccountAuthenticator con un AbstractThreadedSyncAdapter para sincronizar ciertos datos en un servidor con un proveedor de contenido.

Hice todo y tanto la adición de cuentas como la sincronización se están ejecutando sin ningún problema.

Ahora he intentado añadir un Preferencia pantalla al igual que se sugiere en la referencia androide (buscar AbstractAccountAuthenticator, se explica allí) a través de XML como esto:

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 preferencia-Screen-XML tiene el siguiente aspecto:

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> 

La pantalla se promted como debe ser, pero y que es el problema: Cuando hago clic en la pantalla PREFERENCE con la intención que lleva a una caída del sistema (tanto en el emulador y mi HTC-Desire) .

Logcat dice:

ERROR/Android Runtime (18754): android.util.AndroidRuntimeException: Calling startActivity() desde fuera de un contexto actividad requiere la bandera FLAG_ACTIVITY_NEW_TASK. ¿Es esto realmente lo que quieres?

(toda Logcat on pastebin)

Aquí la parte del manifiesto, donde se define la actividad:

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

El conjunto de pruebas de código (que es mi proyecto en lo esencial para encontrar la problema) es de encontrar en googlecode (http://code.google.com/p/cleanproject/source/browse/) (Eclipse-Project)

Gracias ya por su ayuda, Esentian

p.s .: keygen no es un generador de claves, significa más key_general. Un poco expresado inartfully;)

Respuesta

7

i tenía el mismo problema y acaba de descubrir, que si cambia sus preferencias para:

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

entonces funciona como se esperaba. Esto es extraño porque esperaría que PreferenceCategory agrupara los elementos como sus hijos ... ¿Y por qué resulta con un error no relacionado (?)?

+0

¡Gracias por tu respuesta! Me estaba mudando las últimas semanas a un piso nuevo y no estaba conectado hasta hoy. Esta solución es como una solución alternativa, pero gracias, ahora todo está funcionando bien. – Esentian

+2

Maldita sea, oh ese Android, simplemente al eliminar finalmente está funcionando. ¡Muchas gracias! – Defuera

+0

No funciona para mí. La PreferenceScreen no aparece si está fuera de una categoría de preferencia. –