-2

現在、私はAndroid OS用のダイヤラーアプリを開発しています。Android - 連絡先とテーブルの結合は不可能ですか?

これは、ListViewの連絡先、連絡先を表示します。 SearchViewは、姓、名前、ニックネーム、およびすべての番号で連絡先を検索するために使用されます。検索文字列が4つのキー種類の部分文字列を表す場合、リストは一致するエントリに縮小されます。

私はリストを埋めるためにCursorAdapterとCursorLoaderを使用しています。 これは、パフォーマンスのために非常に重要です。 その時点まで、すべてが機能しており、絶対的にクリアです。今

問題: 私は1つのSQLクエリで、デフォルトの連絡先デシベル(contacts2.db)2から3のテーブル、 に参加する必要があります。 それで、私のアプリはそれ自身のプライベートdbを使うべきではありません。 しかし、既存のContentProviderは複数のテーブルへのアクセスを提供していません。 - >問題が発生しました。

私自身のContentProviderを実装すると、SQLiteQueryBuilderを使用してジョインを行うことができます。 しかし、それは私的なデータベースのためだけに働くように見えます。 私は直接に位置contacts2.db、アクセスしようとすると:

/data/data/com.android.providers.contacts/databases/contacts2.db 

を私はエラーを次取得:

すべてのアプリが適切なを使用して、それ自身のストレージを持っているので、何とか、期待されている
Failed to open database '/data/data/com.android.providers.contacts/databases/contacts2.db'. 
           android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (Sqlite code 14): Could not open database, (OS error - 13:Permission denied) 

根底にあるLinuxファイルシステムの中にあります。

このデータベースにどのようにして読み取りアクセス権を取得できますか? DBオブジェクトをアンドロイドシステムに何らかの形で要求したり、Contextオブジェクトを利用したりできますか?あるいは、私はそれらのアクセス権を何とか得ることができますか?

連絡先アプリと同じAUTHOTITY_NAMEを使用できますか?このように:

com.android.providers.contacts 
  • 私はJavaコードを使用して列の参加に興味がない、それは非常に遅く、UGLYだ、と私はとにかく
  • 私がいないリストまたは類似のものの代わりにカーソルを必要としますで、すべてのことが可能である - SQLに
  • すべてのあなたのAndroid-賛否そこ

  • 私はアンドロイドのものを実装する方法で助けを必要としませんが、助けが必要ですか? または、アンドロイドのapiは本当にその詐欺ですか? 私は実際にCursorJoinerを使って必要な情報に「参加する」必要がありますか? 何とか最初のものからCursorオブジェクトを生成しますか?

    大変ありがとうございます。

  • 答えて

    1

    あなたはしていません。あなたは、それが与えられたデバイス上の連絡先dbの名前であると仮定することすらできません。すべてのデバイスで連絡先dbにアクセスする唯一の方法は、ContentResolverを使用することです。

    0

    Match a Contact By Any Type of Dataのように、公式のAndroidレッスンRetrieving a List of Contactsが表示されているようです。4ステップは、前の手順で作成したコードに基づいているため

    Request Permission to Read the Provider
    Match a Contact by Name and List the Results
    Match a Contact By a Specific Type of Data
    Match a Contact By Any Type of Data

    : あなたはすべての4つのステップを実行する必要があります。

    基本的に、それはAndroidの連絡先の枠組みに組み込まれている検索機能を使用しています:Contacts.CONTENT_FILTER_URI

    Use Contacts.CONTENT_FILTER_URI as the base URI, and append your search string to it by calling Uri.withAppendedPath(). Using this URI automatically triggers searching for any data type

    関連する問題