Почему Android -учетная запись и синхронизация перезагружается при попытке найти мою деятельность настройки?

StackOverflow https://stackoverflow.com/questions/4685037

Вопрос

У меня есть деятельность, которую я могу объявить категорией пускового средства, и она отлично запускается с домашнего экрана. Однако, когда я пытаюсь связать одну и ту же деятельность в активность настроек моего синхрода и открываю ее со страницы учетных записей и синхронизации -> MySyncadapter -> (Touch Scousting Suithing), он прервет с помощью системной фатальной ошибки (перезагружает телефон).

Между тем, мой синхедиаптер работает в других отношениях.

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

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?
Это было полезно?

Решение

Я понял! По сути, пакет является корневым пакетом, а целевой класс является полностью квалифицированным именем.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top