【问题标题】:Why does Android Account & Sync reboot when trying to find my settings activity?为什么在尝试查找我的设置活动时 Android 帐户和同步会重新启动?
【发布时间】:2011-01-13 20:43:21
【问题描述】:

我有一个可以声明为启动器类别的活动,它可以从主屏幕正常启动。但是,当我尝试将相同的活动连接到我的 SyncAdapter 的设置活动中并从 Accounts & Sync 页面 -> 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

这是我的清单文件中的一个 sn-p:

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

记录sn-p:

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?

【问题讨论】:

  • 我需要任何特殊权限吗?
  • 当然可以,我认为您至少需要管理帐户或类似的东西。你应该看看 API 8 中的示例
  • @Symbiam - 我将(再次)看一下 API 8 中的示例。

标签: android android-activity fatal-error android-syncadapter


【解决方案1】:

我明白了!基本上,包是根包,目标类是全限定名。

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

我还必须仔细检查我的 AndroidManifest,以确保这些值拼写正确,以便它们可以匹配,并且我有一个对 Activity 响应有意义的意图过滤器。

现在我必须实现设置配置活动并正确格式化 Intent 中的结果。我感觉到另一个问题来自我:)

【讨论】:

  • BTW - 它重新启动了我的 G2 和 LG,我的 HTC 刚刚崩溃了 htc 的设置活动。显然它是一个包装器 Activity 并防止崩溃进入操作系统?!?!我将在四种不同的设备上进行测试:LG、HTC、G2 和三星。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多