0

У меня есть активность, которую я могу объявить как категория Launcher, и она запускается просто отлично с главного экрана. Тем не менее, когда я пытаюсь подключить одну и ту же активность к активности настроек SyncAdapter и открываю ее с учетной записи синхронизации & -> MySyncAdapter -> (перечисление учетной записи), она прерывается с системной фатальной ошибкой (перезагружает телефон).Почему Android Account & Sync перезагружается при попытке найти активность моих настроек?

Между тем, мой SyncAdapter работает с другими аспектами.

Вот бревно в точке удара:

01-13 12:31:00.976 5024 5038 I ActivityManager: Starting activity: Intent { act=android.provider.Settings.ACTION_SYNC_SETTINGS flg=0x10000000 cmp=com.myapp.android.syncadapter.ui/SyncAdapterSettingsActivity.class (has extras) } 
01-13 12:31:00.985 5024 5038 E AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: android.server.ServerThread 
01-13 12:31:00.985 5024 5038 E AndroidRuntime: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.myapp.android.syncadapter.ui/SyncAdapterSettingsActivity.class}; have you declared this activity in your AndroidManifest.xml? 
01-13 12:31:00.985 5024 5038 E AndroidRuntime: at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1404) 
01-13 12:31:00.985 5024 5038 E AndroidRuntime: at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378) 
01-13 12:31:00.985 5024 5038 E AndroidRuntime: at android.app.ContextImpl.startActivity(ContextImpl.java:622) 
01-13 12:31:00.985 5024 5038 E AndroidRuntime: at android.preference.Preference.performClick(Preference.java:828) 
01-13 12:31:00.985 5024 5038 E AndroidRuntime: at android.preference.PreferenceScreen.onItemClick(PreferenceScreen.java:190) 
01-13 12:31:00.985 5024 5038 E AndroidRuntime: at android.widget.AdapterView.performItemClick(AdapterView.java:284) 
01-13 12:31:00.985 5024 5038 E AndroidRuntime: at android.widget.ListView.performItemClick(ListView.java:3382) 
01-13 12:31:00.985 5024 5038 E AndroidRuntime: at android.widget.AbsListView$PerformClick.run(AbsListView.java:1696) 
01-13 12:31:00.985 5024 5038 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:587) 
01-13 12:31:00.985 5024 5038 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:92) 
01-13 12:31:00.985 5024 5038 E AndroidRuntime: at android.os.Looper.loop(Looper.java:123) 
01-13 12:31:00.985 5024 5038 E AndroidRuntime: at com.android.server.ServerThread.run(SystemServer.java:517) 
01-13 12:31:00.985 5024 5038 I Process : Sending signal. PID: 5024 SIG: 9 
01-13 12:31:01.005 5019 5019 I Zygote : Exit zygote because system server (5024) has terminated 
01-13 12:31:01.015 1211 1211 E installd: eof 

Вот отрывок из моего файла манифеста:

<activity android:name="com.myapp.android.syncadapter.ui.SyncAdapterSettingsActivity" 
       android:label="@string/title_settings" 
       android:windowSoftInputMode="stateAlwaysHidden|adjustPan"> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 
      <action android:name="android.intent.action.MAIN" /> 
      <action android:name="android.provider.Settings.ACTION_SYNC_SETTINGS"/> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

Я забыл о файле XML ресурсов (account_preferences.xml), который ссылки. Он обеспечивает еще один уровень косвенной ссылки на название деятельности. Я могу манипулировать им, чтобы соответствующим образом изменить запись в журнале. Итак, я думаю, что это намек на решение. Целевой пакет и целевой класс объединяются вместе для определения имени запускаемой задачи. То, что я заметил в журнале, заключается в том, что в названии пути есть косая черта (/), и я думаю, поэтому он не может найти активность. Например, если я возьму (.ui) из пакета и поместил его в целевую активность, тогда косая черта перемещается до .ui в пути.

account_preferences.xml:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <PreferenceCategory android:title="@string/format_auth_preferences" /> 
    <PreferenceScreen 
     android:key="key_syncadapter_auth" 
     android:title="@string/key_syncadapter_auth_action" 
     android:summary="@string/key_syncadapter_auth_summary"> 
     <intent 
      android:action="android.provider.Settings.ACTION_SYNC_SETTINGS" 
      android:targetPackage="com.myapp.android.syncadapter.ui" 
      android:targetClass=".SyncAdapterSettingsActivity" /> 
    </PreferenceScreen> 
</PreferenceScreen> 

журнал сниппет:

01-14 14:34:34.270 E/AndroidRuntime(6374): *** FATAL EXCEPTION IN SYSTEM PROCESS: android.server.ServerThread 
01-14 14:34:34.270 E/AndroidRuntime(6374): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.myapp.android.syncadapter.ui/.SyncAdapterSettingsActivity}; have you declared this activity in your AndroidManifest.xml? 
+0

Нужны ли какие-либо специальные разрешения? – mobibob

+0

Уверен, да, я думаю, вам нужно хотя бы администраторский аккаунт или что-то в этом роде. Вы должны взглянуть на образец в API 8 –

+0

@Symbiam - я посмотрю (снова) на образец в API 8. – mobibob

ответ

0

Я получил его! По сути, пакет представляет собой корневой пакет, а целевой класс - это полное имя.

 <intent 
     android:action="android.provider.Settings.ACTION_SYNC_SETTINGS" 
     android:targetPackage="com.myapp.android.syncadapter" 
     android:targetClass="com.myapp.android.syncadapter.ui.SyncAdapterSettingsActivity" /> 

Я также должен был тщательно проверить мой AndroidManifest, чтобы быть уверенным, что значения были написаны правильно, чтобы они могли соответствовать и что я имел намерения фильтр, который был значимым для деятельности, чтобы реагировать.

Теперь мне нужно реализовать активность конфигурации настроек и правильно отформатировать результат в намерении. Я чувствую другой вопрос, исходящий от меня :)

+0

BTW - он перезагрузил мой G2 и LG, мой HTC просто разбил активность настроек htc. По-видимому, это операция-обертка и предотвращает выход из строя ОС?!?! Я буду тестировать на четырех различных устройствах: LG, HTC, G2 и Samsung. – mobibob