2

Android (Froyo 2.2) SMS ロギング アプリを作成しようとしています。多くのチュートリアルを使用して、アプリの主要部分を作成しましたが、魅力的に機能します! 基本的に、最後の SMS (送信または受信) を読み取り、電話番号で連絡先の名前を取得し、ミリ秒単位の unixtime を日付に変換し、結果を画面に表示します。

ここで、GUI を削除し、そのコードを変更して、アプリが電話の着信/発信 SMS アクティビティを監視するようにします。ある場合は、言及されたコードを開始し、結果をファイルに保存します。

アプリ全体がユーザーにとって完全に透過的/ステルスであることを望みます(バックグラウンドで動作します)。どうにかして ContentObserver クラスを使用する必要があるのではないかと疑っていますが、実装に問題があります (開始時でも)。

手伝ってくれる?

現在のコード:

import android.app.Activity;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.PhoneLookup;
import android.widget.TextView;
import android.net.Uri;
import android.database.Cursor;
import java.util.Date;

public class SMSLog extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView tv = new TextView(this);

        Uri uriSMS = Uri.parse("content://sms/");
        Cursor cur = getContentResolver().query(uriSMS, null, null, null, null);
        cur.moveToNext();

        String body = cur.getString(cur.getColumnIndex("body"));   
        String add = cur.getString(cur.getColumnIndex("address"));
        String time = cur.getString(cur.getColumnIndex("date"));
        String protocol = cur.getString(cur.getColumnIndex("protocol"));       

        String contactName = "";
        Uri personUri = Uri.withAppendedPath( ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(add));  
        Cursor c = getContentResolver().query(personUri, new String[] { PhoneLookup.DISPLAY_NAME }, null, null, null );  
        if( c.moveToFirst() ) {  
            int nameIndex = c.getColumnIndex(PhoneLookup.DISPLAY_NAME);  
            contactName = c.getString(nameIndex); 
        }
        c.close();
        cur.close();

        String out = "";
        Date d = new Date(Long.valueOf(time)); 

        if (protocol == null)
            out = "Sending to: "+ contactName + " <"+add +">\nDate: "+d +"\nBody: "+body+"\n\n";
        else 
            out = "Received from: "+ contactName + " <"+add +">\nDate: "+d +"\nBody: "+body+"\n\n";

        tv.setText(out);
        setContentView(tv);

    }
}
4

0 に答える 0