問題タブ [android-syncadapter]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - ContentProvider がデータと同期領域に表示されない
カスタム ContentProvider を [データと同期] の下に表示しようとしていますが、いくつかの問題が発生しています。つまり、表示されません。
詳細:
私の AndroidManifest.xml にはプロバイダーとサービスがあります。
res/xml/syncadapter.xml には次の内容があります。
安全のために、onCreate で次のように呼び出しました。
アクティビティをロードすると、ContentResolver.setIsSyncable から adb ログが取得され、アカウントは既に同期可能に設定されているため、メソッドは何も実行していません。
それでも、プロバイダは[設定] > [アカウントと同期] > [データと同期] に表示されません。理由についてのアイデアはありますか?そのセクションに何が表示されるかをどのように決定するか知っている人はいますか?
[編集] いくつかの詳細情報:
デバッグに何時間も費やした後、次のエラーに遭遇しました。
また、私の SyncService クラスが実際に呼び出されることはないようです。私はそれを自分で呼び出すことになっていますか?私が見たサンプルや野生のアプリケーションはそれ自体を呼び出しませんが、それらにはすべて認証コンポーネントもあります。考え?
android - コンテンツ プロバイダ ラベルの読み取り中にエラーが発生しました
そのため、コンテンツ プロバイダーとサーバーの SyncAdapter に基づいて同期を実装しようとしています。すべてが適切に作成および初期化されたようで、アカウントと同期に自分のアカウントが表示され、コンテンツ プロバイダーを同期するためのチェックボックスも表示されます。
しかし、LogCat で奇妙なエラーが発生しました。
エラー/AccountSettings(130): プロバイダーには、機関 'com.opussync.model.db.opuscontentprovider' のラベルが必要です
しかし、マニフェストにそのラベルを確実に設定しました!
そのため、アカウントのデータと同期で同期チェックボックスをオンにしようとすると、次のメッセージが表示されると思います。
現在、同期に問題が発生しています。まもなく戻ってきます
これが私のマニフェストの主要部分です:
android - 同期完了を Android SyncManager に通知する方法は?
SyncAdapter 内で、スレッドを終了する直前に cancelRequest() を使用していましたが、進行中の同期をキャンセルしたい別のエンティティ (UI) によってのみ使用されることを意図していると判断しました (時間がかかりすぎて、おっと、等。)
現在、私の同期は、保留中のリクエストが常にあると考えています。これを使用して、新しいリクエストを無視します。
私が行っているもう 1 つのことは、ContactsContract.AUTHORITYへの変更をリッスンしている Service のリスナー スレッドであり、集計の同期を開始できます。
更新: このリスナー スレッドがリークしています。完了したら .stop() を発行していますが、サービスが停止しないように維持していると思われるハンドラーがあります。
保留中、リサイクルなどのためにそのようなものを追跡するエンティティ(つまり、SyncManager)に SyncResults を送信したいと思います。
私は何が欠けていますか?
android - 連絡先の名前をカレンダーの予定の説明に同期するための最良の方法は何ですか
私のアプリはカレンダーイベントを作成します。イベントの説明には連絡先の名前が含まれています。ユーザーが電話の連絡先を使用して連絡先の名前を変更した場合、その変更をカレンダーイベントの説明フィールドに反映させたいと思います。
それを行うための最良の方法は何ですか?
私は2つの選択肢を考えることができます。どちらにも、自分のデータベースにある連絡先の名前のコピーが含まれています。変更が発生したら、変更されたレコードを検索し、カレンダーイベントを更新します。
問題は、新しい名前をデータベースに効率的に移動する方法です。
- 連絡先にコンテンツオブザーバーを登録し、すべての連絡先名を比較します。
- 同期アダプターを使用する
どちらの方法が本当に効率的ですか?
私は同期アダプターに精通していませんが、アダプターはアカウントを必要としないと思います(そのようなものはありますか?)、そして変更をすぐにフローさせたい(つまり、次にスケジュールされた同期ではない)
まったく別の方向性を含め、どんな助けでも大歓迎です。
android - ContentProviderを使用しないカスタムSyncAdapter
アプリからの情報をサーバーと同期する独自のSyncAdapterを作成したいと思います。重要なのは、同期自体を自分のアプリケーションのコンテキストから実行し、DBへの自分の接続を使用して、ContentProviderを使用して自分のDBにアクセスする必要がないようにすることです。
それは可能ですか?
ありがとうございました、
ウディ
android - 同期アダプタを使用して着信フィードを維持する
これの具体的な例は見つかりませんが、かなりよく踏まれたパスであり、同期アダプターの主な目的の1つであるように思われます。私はこれのほとんどを実装しましたが、まだ理解するのにいくつかの問題があります。これが今の私の基本戦略です
PerformSync
- ローカルに保存された最後のアイテムを把握する
- ローカルアイテムがない場合は、新しいアイテムを特定の最大サイズにプルします
- ローカルアイテムがある場合は、ローカルアイテムに到達するまで新しいアイテムをプルします
- 最大アイテムサイズを超えるアイテムを削除する
同期された情報を反映する必要があるコンテンツオブザーバーを備えたリストアダプターがあります。
質問: これらすべてが適切である場合、私の現在のジレンマは、データベースからアイテムをいつ削除するかです。コンテンツの使用中は削除を控えるべきだと思いますが、同期アダプターで、データが現在監視されているかどうかを確認するにはどうすればよいですか?(オブザーバーの静的マップ?)
補足: それ以外にも、他の問題を予測できるように、これを実際に実行する例をいくつか示したいと思います。私はグーグルIOの話について知っています、それはいくつかの素晴らしい高レベルの哲学を持っています、しかし詳細は多くの非教祖の開発者にとって不思議に思うでしょう。
同期アダプターはAndroidの最も望ましい機能の1つであり、ユーザーベースの拡大にのみ役立つため、これはすべてのAndroid支持者が実行し、正しく実行することを望んでいる非常に価値のある機能だと思います。 。
android - Googleカレンダーの同期アダプターを作成するにはどうすればよいですか?
学生が大学のコースを管理するためのアプリケーションを作成しています。
次に、イベント(イベントには日付と時刻と簡単な説明があります)をAndroidのGoogleカレンダーと同期させたいと思います。
Androidサンプルのsamplesyncアダプターを調べましたが、カレンダーにはあまり役立ちませんでした。
アプリの同期は、チェックボックスを使用してアプリの設定から有効または無効にする必要があります。
誰かが役に立つことができるいくつかのサンプルコードを持っていますか?
android - カスタム連絡先のプレゼンス ステータスが短時間で消える
SyncAdatper
アプリの連絡先を電話の連絡先に追加するために自分で作成しました。プレゼンス ステータスを除いて、すべて (画像、ステータス、カスタム アクションなど) が機能しています。
グーグルによると:
プレゼンス ステータスは本質的に揮発性であるため、コンテンツ プロバイダは、このフィールドを長期ストレージに保存しないことを選択する場合があります。
そのため、連絡先に常に存在を維持する方法がわかりません。カーソル内の存在を更新するためのコードは次のとおりです。
緑色のドットが表示されますが、連絡先画面を離れて短時間 (秒) で戻ると、「時々」緑色のドットが表示されなくなります。
これを解決するために私にできることはありますか?
android - コンテンツ プロバイダーでの SQLite "データベース スキーマが変更されました" エラー
私は同期ルーチンにContent Providers
andを使用しています。Sync Adapters
私のルーチンは を受け取りJSONObject
、エントリを挿入または更新します。
更新するか挿入するかを決定するために、エントリがデータベースに存在するかどうかを確認します。ここで sqlite エラーが発生します。
私はいくつかの調査を行い、主題に関するこの議論を見つけました。この議論から、私はそれsqlite_exec()
が呼び出されなければならないことを理解しています。これをコンテンツ プロバイダに実装するにはどうすればよいですか?
編集
挿入・更新チェック
ContentProvider::アップデート
android - アカウントを AccountManager に追加した直後に同期を開始しますか?
AccountManagerに多数のアカウントがあり、新しいアカウントを追加すると、Android はすべてのアカウントの同期を開始します。それらがたくさんあるので、同期を開始するのに少なくとも 15 秒かかります。
新しいアカウントを追加するときにすべてのアカウントの同期を停止/キャンセルする方法はありますContentResolver.requestSync
か? その時点で自分のアカウントのみを呼び出して同期を開始できますか?
ありがとう、
アレクサンダル・イリッチ。