1

私は現在使用しています

ContentResolver cr = getContentResolver();
Uri uri = Uri.parse("content://sms/");
Cursor messagesCursor = cr.query(uri, new String[] { "_id", "address", "body", "person" }, null, null, null);

if (messagesCursor.getCount() > 0) {
    while (messagesCursor.moveToNext()) {
        colName = getContactName(messagesCursor.getString(messagesCursor.getColumnIndex("address"))) + "\n";
    }
}

ユーザーの受信ボックス内のすべてのテキストを取得します。そこからmessagesCursor.getColumnIndex("address")、SMSの番号を取得します。次にgetContactName()、連絡先のリストから連絡先の名前を取得する場所に配置されます。

このメソッドは、すべての単一のテキストメッセージを通過し、番号を取得し、連絡先の名前を取得し、名前が配列に存在するかどうかを確認し、配列に配置されていない場合は、そこからListViewを作成するために長い時間がかかります。

ユーザーの受信トレイに大量のテキストが含まれている場合、アプリの起動時にロードに長い時間がかかります。

受信トレイから一意の番号を取得する特別な方法はありますか?何かcr.query

前もって感謝します。(:


編集 :

単純な受信トレイアプリケーションを作成しています。元の受信トレイメッセージから読み取り、その中のメッセージを一覧表示します。

このプロジェクトでは、電話番号であるすべての「アドレス」を読み取り、それをArrayListに入れ、最後にListViewに移動しました。受信トレイ内のすべてのメッセージを循環するため、起動に長い時間がかかります。

例えば ​​:

受信トレイメッセージ

  • 人1

    人1

    人1

    人2

    人2

    人3

    人3

    人3

    人3


私の現在のコードは何をしますか:

すべての単一のメッセージを読む

ArrayListの名前を確認してください

そうである場合は、スキップしてください。そうでない場合は、配列を追加します。

ArrayListをListViewにスローします。


私の意図は何でしたか:

読み取るだけのコード:

人1

人2

人3

4

1 に答える 1

0

プロジェクションで「アドレス」のみを使用してみてください(つまり、「_id」も含めないでください)-これについてはわかりませんが、ケースが解決する場合があります。

于 2012-07-03T17:38:08.490 に答える