SMS Logger:如何监控传入/传出短信活动?

时间:2012-04-17 07:45:33

标签: java android sms broadcastreceiver contentobserver

我正在尝试创建android(Froyo 2.2)短信记录应用。 使用了许多教程我已经成为应用程序的主要部分,它就像一个魅力! 基本上它读取最后一个短信(发送或接收),通过电话号码获取联系人姓名,将毫秒unixtime转换为日期并在屏幕上显示结果。

现在我想删除GUI,修改该代码,以便应用程序监视手机上的任何传入/传出短信活动,如果有,它将启动提到的代码并将结果保存到文件。

我希望整个应用程序对用户完全透明/隐身(在后台工作)。 我怀疑我必须以某种方式使用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);

    }
}

0 个答案:

没有答案