为什么在尝试找到我的设置活动时会重新启动Android帐户和同步?
-
11-10-2019 - |
题
我有一项可以将其声明为发射器类别的活动,并且从主屏幕上启动良好。但是,当我尝试将相同的活动连接到我的SyncAdapter的设置活动中时,并从帐户和同步页面 - > mysyncadapter->(触摸帐户列表)将其打开,它会使用系统致命错误(重启电话)中止。
同时,我的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?
解决方案
我知道了!基本上,软件包是根软件包,目标类是完全合格的名称。
<intent
android:action="android.provider.Settings.ACTION_SYNC_SETTINGS"
android:targetPackage="com.myapp.android.syncadapter"
android:targetClass="com.myapp.android.syncadapter.ui.SyncAdapterSettingsActivity" />
我还必须仔细检查我的AndroidManifest,以确保其值正确拼写,以便它们可以匹配,并且我有一个意图过滤器,这对于活动的响应很有意义。
现在,我必须实现设置配置活动并正确地将结果格式化。我感觉到我的另一个问题:)
不隶属于 StackOverflow