2010-09-16 11 views
5

Ich bin neu bei Android-Entwicklung.PreferenceScreen - <intent .../> - Ausnahme - FLAG_ACTIVITY_NEW_TASK

Im Projekt wird ein AbstractAccountAuthenticator mit einem AbstractThreadedSyncAdapter implementiert, um bestimmte Daten auf einem Server mit einem Inhaltsanbieter zu synchronisieren.

Ich habe alles gemacht und sowohl das Hinzufügen von Konten und die Synchronisierung läuft ohne Probleme.

Jetzt habe ich versucht, einen Preference-Bildschirm nur in der Android-Referenz empfohlen, hinzuzufügen (Suche nach AbstractAccountAuthenticator wird erklärt, es) über XML wie folgt aus:

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

Die Preference Screen-xml sieht wie folgt aus:

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> 

Der Bildschirm ist promted, wie es sein soll, aber, und das ist das Problem: Wenn ich auf dem PreferenceScreen klicken mit der Absicht, es zu einem Absturz des Systems führt (sowohl im Emulator und mein HTC-Wunsch) .

Logcat sagt:

ERROR/Android Runtime (18754): android.util.AndroidRuntimeException: Aufruf startActivity() von außen einer Aktivität Kontext der Flagge FLAG_ACTIVITY_NEW_TASK erfordert. Ist das wirklich was du willst?

(ganze Logcat on pastebin)

Hier ist der Teil des Manifests, in dem die Aktivität definiert:

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

Der gesamte Test-Code (es ist mein Projekt auf dem Wesentlichen das finden Problem) ist bei Googlecode (http://code.google.com/p/cleanproject/source/browse/) (Eclipse Project)

Vielen Dank schon für Ihre Hilfe zu finden, Esentian

S.S .: keygen ist kein Schlüsselgenerator, es bedeutet mehr key_general. Ein bisschen inartfully ausgedrückt;)

Antwort

7

hatte ich das gleiche Problem und habe gerade herausgefunden, dass, wenn Sie Ihre Einstellungen ändern:

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

Dann funktioniert es wie erwartet. Das ist komisch, weil ich erwarten würde, dass PreferenceCategory Elemente als seine untergeordneten Elemente gruppiert ... Und warum ergibt sich ein solcher nicht verwandter (?) Fehler?

+0

Vielen Dank für Ihre Antwort! Ich zog die letzten Wochen in eine neue Wohnung und war bis heute offline. Diese Lösung ist wie ein Workaround, aber danke, jetzt läuft alles gut. – Esentian

+2

Gott verdammt, oh, dass Android, einfach durch Entfernen es endlich funktioniert. Vielen Dank! – Defuera

+0

Es funktioniert nicht für mich. Der PreferenceScreen wird nicht angezeigt, wenn er sich außerhalb einer PreferenceCategory befindet. –

Verwandte Themen