私が開発している Android アプリには、マップするデータベースがあります。
<連絡先ID、連絡先検索キー> --> <連絡先に関連付けられた私のカスタムデータ>
着信 SMS メッセージが着信したときに、SMS メッセージを送信した連絡先に関連付けられた連絡先に関連付けられたマイ カスタム データを検索できるようにしたいと考えています。できるだけ少ないステップでルックアップを実行したいと考えています。
SMS メッセージから取得できる唯一のデータは電話番号であるため、基本的に問題は、電話番号を連絡先に関連付けられたカスタム データにできるだけ少ない手順でマッピングすることです。
ここで、たとえばhere で説明されているように、 ContactsContract.PhoneLookupを使用して電話番号から連絡先を検索できることを認識しています。ただし、連絡先 ID と連絡先検索キーの両方が変更される可能性があるため、これでは目的の結果が得られません。したがって、データベースに永続化された連絡先の ID またはルックアップ キーのいずれかが変更された場合、基本的にデータベース全体をロードし、各行の ID/ルックアップ キーを更新してから、それらが同じ連絡先を表しているかどうかをテストする必要があります。 ContactsContract.PhoneLookup によって返されたもの。これは私が避けたいかなり残忍な解決策です。
私がやりたいことは、電話番号をカスタム データにマッピングするテーブルを保持することです (N:1 の関係で)。
<電話番号> --> <連絡先に関連付けられたマイ カスタム データ>
このようにして、少なくとも理論上は、電話番号の列にインデックスを付けて、1 つのステップでデータを検索することができます。ただし、電話番号にはさまざまな形式があります。私のソリューションは、特定の電話番号の正規表現を作成できる場合にのみ機能します。私の計画は、PhoneNumberUtils.getStrippedReversedを使用して、効率的にインデックス可能な正規の電話番号を生成することでしたが、これは次のような些細なケースで失敗します。
PhoneNumberUtils.getStrippedReversed("+1(306)6656320") --> 02365566031 PhoneNumberUtils.getStrippedReversed("(306)6656320") --> 0236556603
それらは同じ数ではありません!
それで、長々とした説明として、私の質問は次のとおりです。電話番号を正規の電話番号に変換して、番号に対してインデックス付きデータベースルックアップを実行できる方法、またはその他の解決策を考えられる人はいますか?上で説明した問題?