1

私はANdroidアプリケーションに取り組んでいます。私のアプリでは、すべての会話を一覧表示する必要があり、その部分を実行しました。各会話には、その番号のすべてのSMSが含まれています。したがって、受信トレイと送信済みSMSをすべてのSMSと区別する必要があります。次のAPIを使用して受信トレイを検索して送信できることを知っています。

content://sms/inbox
content://sms/sent

しかし、私はこれを使いたくありません。私はAPIを使用してすべてのSMSをリストしました

content://sms/

columnindexのtype、addressでテストしましたが、受信トレイと送信トレイで常に同じ結果が得られます。サンプルコードは次のとおりです。

Uri SMS_INBOX = Uri.parse("content://sms");
        c = getContentResolver().query(SMS_INBOX, null, "thread_id" + " = "
                        + "3", null,
                        "date" + " ASC");
        if(c.moveToFirst()){
            count.add(c.getCount());
            for(int j=0;j<c.getCount();j++){
                System.out.println(c.getString(c.getColumnIndexOrThrow("body")).toString());
                System.out.println("new   person=="+c.getColumnIndex("person")+"type=="+c.getColumnIndexOrThrow("type"));
                c.moveToNext();
            }
        }
        c.close();

私を助けてください。

4

1 に答える 1

6

ここでContentObserverを使用して、送受信されたメッセージを追跡できます。

onChange()のメソッドをオーバーライドContentObserverしてSMSタイプを取得し、それに応じて機能します。疑似コードは以下のようになります。

Cursor cursor = mContext.getContentResolver().query(Uri
                             .parse("content://sms"), null, null, null, null);

String type = cursor.getColumnIndex("type");
if(cursor.getString(type).equalsIgnoreCase("1")){
    // sms received
 }
 else if(cursor.getString(type).equalsIgnoreCase("2")){
    //sms sent
 }

ContentObserverSMSに登録し、

ContentResolver observer = this.getContentResolver();
observer.registerContentObserver(Uri.parse("content://sms"), 
                               true, new MySMSObserver(new Handler(),this));

ハンドラーとコンテキストとして引数を持つコンストラクターでMySMSObserver拡張するクラスはどこにありますか?ContentObserver

public MySMSObserver(Handler handler, Context context) {
        super(handler);
        this.context = context;
}
于 2012-08-16T04:45:50.200 に答える