0

Launcherカテゴリとして宣言できるアクティビティがあり、ホーム画面からうまく起動します。しかし、SyncAdapterの設定アクティビティに同じアクティビティを接続し、アカウント&同期ページ - > MySyncAdapter - >(アカウントリストをタッチする)から開くと、システムの致命的なエラー(電話機の再起動)で中止されます。設定アクティビティを見つけようとしているときにAndroidアカウントと同期が再起動するのはなぜですか?

一方、私のSyncAdapterは他の点では機能しています。ここで

は、インパクトの時点でのログです:私は、あるXMLリソースファイル(account_preferences.xml)忘れ

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

:ここ

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 

は私のマニフェストファイルからの抜粋です参照してください。別のレベルの間接参照 - アクティビティの名前への参照を提供します。私はそれに応じて変更するログエントリを取得するためにそれを操作することができます。だから、私はそれが解決策のヒントだと思う。ターゲットパッケージとターゲットクラスを連結して、開始するアクティビティの名前を定義します。ログに気づいたのは、パス名にスラッシュ(/)があることです。なぜそれがアクティビティを見つけることができないのだろうと思います。たとえば、パッケージから(.ui)を取り出し、それをtarget-activityに入れると、スラッシュはパスの.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の設定作業をクラッシュしました。どうやらそれはラッパーアクティビティであり、クラッシュがOSに行くのを防ぐのですか? LG、HTC、G2、Samsungの4種類のデバイスでテストします。 – mobibob

関連する問題