問題タブ [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.
android - ContentObserver を使用して変数の変更を監視する
ContentObserver
Uri を作成して登録時に引数として渡すことにより、変数の変更 (文字列など) を監視するために使用することは可能ですか? はいの場合、機能的な例を提供できますか?
android - ContentResolver.notifyChange の呼び出し元を見つける
サービスの構成データを保持するテーブルを更新するアクティビティがあります。SimpleCursorLoader と SupportLoaderManager を使用して、そのアクティビティのリストビューを更新しています。アクティビティの onDestroy でローダーを破棄します。私が見ている問題は、このアクティビティにアクセスしなくても発生するため、関係ない可能性があります。
上記のアクティビティで変更されたテーブルへの URI に ContentObserver を登録するサービスもあります。構成を読み取り、それ自体をセットアップして、Service の onCreate のそのテーブルに ContentObserver を登録します。サービスの onDestroy では、そのリスナーは登録解除されています。
これは、システムにあるいくつかのデータベース/テーブルの 1 つにすぎません。私が見ているのは、まったく別のテーブルを更新すると、この構成 URI の ContentObserver がトリガーされていることです。オーソリティはまったく異なり、さまざまな SqlLite データベースと対話し、アプリケーション内のさまざまなプロセスで実行されています。ContentObservers をトリガーする可能性のある "notifyChange" 呼び出しをすべて削除しましたが、まだ起動しています。
私の質問は、ContentObserver を起動させている notifyChange を誰が呼び出しているかを調べる方法はありますか? アプリケーションの外部のシステムには、オブザーバーに URI を通知する理由がありますか? 私はそれを追跡しようとしていますが、通知がどこから来ているのか手掛かりがなく、壁にぶつかっています.
uri - API レベル 16 の連絡先では、URI を持つ ContentObserver が機能しない
次のコードを試しています:
このコードを実行して連絡先を編集すると、
uri は content://com.android.contacts です
URI で個々の連絡先の ID を取得できないのはなぜですか? SMS オブザーバーを試してみると、そこに ID を含む正しい URI が得られます。ここに欠けているものはありますか?これは、Samsung S3 ハンドセットにあります。
android-contentprovider - CursorAdapter なしでカーソル更新通知を取得するにはどうすればよいですか?
Fragment
ローダーを使用しCursor
て、マップ上のさまざまな物の位置に関するデータを含む を作成しています。これらの場所をデバイスからの距離または検索場所からの距離で並べ替えるコードを継承しました。距離メトリックは、SQL で実装するのが特に簡単なものではないため、(他の場所のように) を使用するのではなく、CursorAdapter
からデータを一度ロードしてから、Cursor
後で並べ替えています。
1 つだけ問題があります。Web サービスが新しい場所のセットを返すとき (たとえば、最初の読み込み時)、リストが更新されません。に を登録しContentObserver
ましたがCursor
、を呼び出すとヒットしnotifyChange(...)
ますContentProvider
。元のロードから保存したCursor
I のカウントがまだゼロであることだけです。
コールバックとは次のContentObserver
ようになります。
CursorAdapter
私は更新時に更新することだけを知ってCursor
おり、更新イベントを予期したときに取得しているという事実は、少なくともプロセスのこの段階が機能していると思わせます。新しいデータを取得するにはどうすればよいですかmCursor
、または新しいデータを表す新鮮なものを取得するにはどうすればよいCursor
ですか?
android - contentProvider.update()から変更されたURIを使用したnotifyChange
update()
を使用してオブザーバーにContentProvider
通知を実装しましたgetContext().getContentResolver().notifyChange(uri, null);
私の明らかな必要性は、1つの行だけが影響を受けるときはいつでも、行固有のURIで通知したいのですが、そうする方法を見つけることができなかったということです。のような追加のクエリ"select id where selectionArgs"
でこれを行うことができますが、これは愚かな方法になります。
onchange(boolean, uri)
ContentProvider.update()
特定の行の代わりに完全なuriを取得します。これは、同じ行を送信しているためであることが理解しやすいです。
MyContentProviderのupdate()メソッド
テーブルを更新します
率直に言って、コードは質問とほとんど関係がなく、コンテキストを提供しようとしているだけです
java - Androidでコンテンツオブザーバーを登録解除する理由と時期
私は Android アプリケーションを開発しており、初めてコンテンツ オブザーバーを使用しています。だから私はたくさんのチュートリアルを読んで、なぜそれが提供されているのか、どのように使うのかという概念を得ました.
今、私はブログでこれらの行を読みました
コンテンツ オブザーバーの登録を忘れずに解除してください
そのため、登録したい場合、ContentObserver
登録を解除しなければならない状況が何であるかを理解できません。
オブザーバーの目的が達成されれば、登録を解除できます。ただし、ユーザーがアプリケーションをアンインストールするまで観察する必要があります。その後、オブザーバーの登録を解除する理由を確認する必要があります。
そのブログのURLはこちら
http://www.grokkingandroid.com/use-contentobserver-to-listen-to-changes/
android - Audio.Media.EXTERNAL_CONTENT_URI の Android コンテンツ オブザーバーの変更を監視する
ファイル名、ファイルパス、および実行された操作を使用して、オーディオファイルのAndroid SDカードの変更を検出する必要があるAndroidアプリを開発しています。SD カードにファイルを追加する場合の例を知りたい
- 追加するファイル名
- ファイルのパス
- 操作 -- 追加
以前にファイルオブザーバーを試しましたが、そのためにはすべてのディレクトリに適用する必要があります。そこで、他の解決策を探して、Audio.Media.EXTERNAL_CONTENT_URIに関する情報を取得しました。次に、このようなコンテンツオブザーバーを作成しました
UriObserver.java -- これはコンテンツ オブザーバーです。
これはその登録用のコードです
音声ファイル関連のsdcardに一部変更があったことをお知らせいたします。ただし、どのファイルが追加、編集、または削除されたかについての情報は何も提供しません。
次に、解決策を検索し、この投稿を取得しました
Android: MTP 経由で接続したときに MediaStore の変更を検出する方法
この投稿では、いくつかのコードがBhieferによって回答として提供されていますが、これはうまくいくと思われるので、それを実装しようとしましたが、実装できませんでした。
これには何ができますか?
アップデート
Audio.Media.EXTERNAL_CONTENT_URI に最新の変更を問い合わせることはできますか? このコード:
最新の変更を提供しません。最新の変更を取得する他の方法はありますか?