PreferenceScreen -- Исключение - FLAG_ACTIVITY_NEW_TASK - PullRequest
6 голосов
/ 16 сентября 2010

Я новичок в разработке для Android.

Проект о реализации AbstractAccountAuthenticator с AbstractThreadedSyncAdapter для синхронизации определенных данных на сервере с поставщиком контента.

Я сделал все, и добавление учетных записей и синхронизация выполняются без проблем.

Теперь я попытался добавить экран настроек, как это было предложено в справочнике по Android (поищите AbstractAccountAuthenticator, это там объясняется) через xml следующим образом:

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

Preference-Screen-xml выглядит следующим образом:

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>

Экран подсказывает, как это должно быть, но вот в чем проблема: когда я нажимаю на PreferenceScreen с намерением, это приводит к сбою системы (как в эмуляторе, так и в моем HTC-Desire).

Logcat говорит:

ERROR / AndroidRuntime (18754): android.util.AndroidRuntimeException: Вызов startActivity () извне контекста действия требует Флаг FLAG_ACTIVITY_NEW_TASK. Это действительно чего ты хочешь?

(целое Logcat на пастбине )

Здесь часть манифеста, где определяется деятельность:

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

Весь тестовый код (это мой проект по основам поиска проблемы) находится по адресу googlecode (http://code.google.com/p/cleanproject/source/browse/) (Eclipse-Project)

Спасибо тебе уже за помощь, Esentian

p.s .: keygen - это не генератор ключей, это означает больше key_general. Немного невнятно выраженный;)

1 Ответ

8 голосов
/ 20 сентября 2010

У меня была такая же проблема, и я только что узнал, что если вы измените свои предпочтения на:

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

Тогда все работает как положено. Это странно, потому что я ожидаю, что PreferenceCategory сгруппирует элементы как свои дочерние элементы ... И почему это приводит к такой не связанной (?) Ошибке?

...