Ich habe eine Aktivität, die ich als Launcher-Kategorie deklarieren kann und sie startet problemlos vom Startbildschirm aus. Wenn ich jedoch versuche, dieselbe Aktivität in die Einstellungsaktivität meines SyncAdapters einzubinden und sie über die Seite Sync-Seite -> MySyncAdapter -> (Touch-Account-Liste) der Accounts & zu öffnen, bricht sie mit einem schwerwiegenden Systemfehler ab (Neustarts des Telefons).Warum startet Android Account & Sync neu, wenn ich versuche, meine Einstellungsaktivität zu finden?
In der Zwischenzeit arbeitet mein SyncAdapter in anderer Hinsicht. Hier
ist das Protokoll am Punkt des Aufpralls:
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
Hier ein Ausschnitt aus meinem Manifest-Datei ist:
<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>
ich über die XML-Ressource-Datei vergessen haben (account_preferences.xml), das ist verwiesen. Es bietet eine weitere Indirektionsstufe - einen Verweis auf den Namen der Aktivität. Ich kann es manipulieren, um den Protokolleintrag entsprechend zu ändern. Also, ich denke, das ist ein Hinweis auf die Lösung. Das Zielpaket und die Zielklasse werden miteinander verkettet, um den Namen der zu startenden Aktivität zu definieren. Was ich im Protokoll bemerkt habe, ist, dass im Pfadnamen ein Schrägstrich (/) steht und ich denke, dass er deshalb die Aktivität nicht finden kann. Zum Beispiel, wenn ich die (.ui) aus dem Paket nehmen und es in die Zielaktivität legen, dann bewegt sich der Schrägstrich vor dem .ui im Pfad.
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>
log-Schnipsel:
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?
Benötige ich spezielle Berechtigungen? – mobibob
Sicher ja, ich denke, dass Sie mindestens Konto oder etwas Ähnliches verwalten müssen. Sie sollten einen Blick auf die Probe in API 8 –
@Symbiam werfen - ich werde (wieder) ein Blick auf das Beispiel in API 8 werfen. – mobibob