問題タブ [contentobserver]

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.

0 投票する
3 に答える
2643 参照

android - ContentObserverは削除に関する通知を受け取りますが、挿入や更新は受け取りません

私のアクティビティには次のコードがあります。

...そして、データを取得するために使用しているDataProviderで、クエリメソッドの通知URIをクエリしているタイプのURIに設定しています。

最後に、更新、挿入、および削除で、操作が成功すると、サブスクライバーに通知されます。

上記の行のnotificationUriは、挿入/更新または削除されるアイテムのURIです。

コードの「...snip...」行にブレークポイントを設定して、いくつかのレコードを追加、削除、更新します。削除についてのみ通知され、更新や挿入については通知されません。私は何が間違っているのですか?

0 投票する
2 に答える
3112 参照

android - Android ContentObserver が複数回登録されないようにする

何らかの理由で、私の Android ContentObserver が複数回登録されています。ContentObserver は、私のメイン アクティビティの内部クラスとして定義されています。その後、インスタンス化されて onCreate() メソッドに登録されます。

onCreate() が複数回呼び出されているだけでなく、メインのアクティビティが一般的に複数回インスタンス化されていると思います。これを防ぐために、Android マニフェストに launchMode を追加しようとしましたが、うまくいかないようです:

また、onCreate に登録する前に Oberserver の登録を解除しようとしましたが、メインのアクティビティの新しいインスタンスであるため、何もしないと思います。

これを防ぐ方法についてのアイデアはありますか? また、定期的に実行するように設定したメインのアクティビティで作成されたランナブルとハンドラーもあり、同じ問題が発生しています。理想的には、修正によってその問題も解決されます。根本的な問題は、メインのアクティビティが複数回インスタンス化されていることだと確信していますが、launchMode がそれを修正しなかったため、次にどこに向かうべきかわかりません。

どんな助けでも大歓迎です。ありがとう

0 投票する
1 に答える
400 参照

android - 連絡先の名前をカレンダーの予定の説明に同期するための最良の方法は何ですか

私のアプリはカレンダーイベントを作成します。イベントの説明には連絡先の名前が含まれています。ユーザーが電話の連絡先を使用して連絡先の名前を変更した場合、その変更をカレンダーイベントの説明フィールドに反映させたいと思います。

それを行うための最良の方法は何ですか?

私は2つの選択肢を考えることができます。どちらにも、自分のデータベースにある連絡先の名前のコピーが含まれています。変更が発生したら、変更されたレコードを検索し、カレンダーイベントを更新します。

問題は、新しい名前をデータベースに効率的に移動する方法です。

  1. 連絡先にコンテンツオブザーバーを登録し、すべての連絡先名を比較します。
  2. 同期アダプターを使用する

どちらの方法が本当に効率的ですか?

私は同期アダプターに精通していませんが、アダプターはアカウントを必要としないと思います(そのようなものはありますか?)、そして変更をすぐにフローさせたい(つまり、次にスケジュールされた同期ではない)

まったく別の方向性を含め、どんな助けでも大歓迎です。

0 投票する
1 に答える
3751 参照

android - Android:アクティビティなしでコンテンツオブザーバーを登録する方法は?

すべての着信および発信 SMS をリッスンし、テキスト ファイルに保存する必要があります。このために、ブロードキャストリスナーを使用してすべての受信メッセージをリッスンしています。これはうまくいきます。しかし、送信 SMS の場合、アクティビティなしでコンテンツ オブザーバーを登録する方法は? アプリケーションでアクティビティを行いたくありません。ブロードキャスト レシーバーは再起動後もリッスンしますが、コンテンツ オブザーバーも再起動後もリッスンしますか? これら2つの機能をマージするにはどうすればよいですか?

これが私のmanifest.xmlの一部です

ここでは、放送受信機を拡張するクラス

どんな助けでも大歓迎です。ありがとう。

0 投票する
1 に答える
569 参照

android - コンテンツ プロバイダーの変更を取得する

リモート カレンダーを Android デバイスと同期するアプリケーションを開発しています。

すべて正常に動作しますが、Android デバイスがユーザーによって編集されたイベント (Android カレンダーを使用) のみを同期できるようにすることで、少し高速化したいと考えています。そのため、どのイベントが編集されたかを知る必要があります。

調べてみましたContentObserverが、カレンダーのイベントごとにオブザーバーを登録する必要があるため、これは良い解決策とは思えません。また、デバイスを再起動した場合、オブザーバーがまだ存在するかどうかさえわかりません。

私が思いついた別の解決策は、すべてのイベントのコピーをローカル データベースに保存することです。そのデータベースは、同期のたびに更新されます。そして、各同期の前に、そのデータベースを Android カレンダー プロバイダーと比較できます...

これを行う簡単な方法はありますか?

ありがとう、ギリス

0 投票する
1 に答える
603 参照

android - 同期アダプタを使用して着信フィードを維持する

これの具体的な例は見つかりませんが、かなりよく踏まれたパスであり、同期アダプターの主な目的の1つであるように思われます。私はこれのほとんどを実装しましたが、まだ理解するのにいくつかの問題があります。これが今の私の基本戦略です

PerformSync

  • ローカルに保存された最後のアイテムを把握する
  • ローカルアイテムがない場合は、新しいアイテムを特定の最大サイズにプルします
  • ローカルアイテムがある場合は、ローカルアイテムに到達するまで新しいアイテムをプルします
  • 最大アイテムサイズを超えるアイテムを削除する

同期された情報を反映する必要があるコンテンツオブザーバーを備えたリストアダプターがあります。

質問: これらすべてが適切である場合、私の現在のジレンマは、データベースからアイテムをいつ削除するかです。コンテンツの使用中は削除を控えるべきだと思いますが、同期アダプターで、データが現在監視されているかどうかを確認するにはどうすればよいですか?(オブザーバーの静的マップ?)

補足: それ以外にも、他の問題を予測できるように、これを実際に実行する例をいくつか示したいと思います。私はグーグルIOの話について知っています、それはいくつかの素晴らしい高レベルの哲学を持っています、しかし詳細は多くの非教祖の開発者にとって不思議に思うでしょう。

同期アダプターはAndroidの最も望ましい機能の1つであり、ユーザーベースの拡大にのみ役立つため、これはすべてのAndroid支持者が実行し、正しく実行することを望んでいる非常に価値のある機能だと思います。 。

0 投票する
1 に答える
5149 参照

android - Android の呼び出し終了リスナー

CallLogプロバイダーからの通話ログの詳細を保存するアプリケーションを開発しています。

Android は通話ログをデータベースに保存し、そのデータベースから新しい行をコピーしています。

ここで、ユーザーが通話を終了したときに通話の詳細をコピーしたいと考えています。そのためにPhoneStateListener、状態の呼び出し、オフフック、およびアイドルモードをリッスンする を使用しましたが、呼び出しが終了した後、アイドルメソッドが複数回呼び出されるため、使用できません。

次にContentObserver、通話ログテーブルに使用しました。Android が通話の詳細を挿入すると onChanged イベントが発生し、その時点でそれらの詳細をデータベースにコピーします。

それは正しい使い方ContentObserverですか?終了したばかりの新しい通話の詳細を取得する他の方法はありますか?

0 投票する
4 に答える
16445 参照

android - ContactsContract の Android ContentObserver で追加、更新、または削除された連絡先を検出するにはどうすればよいですか?

「連絡先DBに変更があった」という一般的な通知を受け取ることができますが、挿入、更新、または削除された特定のレコードを知りたいです。以下は、登録されて onChange 通知を受け取るコードです。残念ながら、私の処理が網羅的で非効率的である理由は明確ではありません。

コード スタブは次のとおりです。