【问题标题】:SMS Logger: method getContentResolver() is undefined for the typeSMS Logger:方法 getContentResolver() 未为该类型定义
【发布时间】:2012-04-15 20:05:23
【问题描述】:

我是 android 编程的初学者,我正在尝试创建将短信记录到文件的应用程序。 我遇到“方法 getContentResolver() 对于 SMSObserver 类型未定义”的问题,我不知道为什么...

代码如下:

public class SMSObserver extends ContentObserver
{
SMSLogger smsLogger;

public SMSObserver(SMSLogger smsLogger) {
    super(new Handler());
    this.smsLogger = smsLogger;
}

@Override
public void onChange(boolean selfChange) {
    super.onChange(selfChange);
    querySMS();
}

protected void querySMS() {
    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 out = "";
    if (protocol == null)
        out = "Sending to "+add + ".Time:"+time +" - "+body;
    else out = "Receive from "+add + ".Time:"+time +" - "+body;
    /*logging action HERE...*/
}
}

和进口:

import android.database.ContentObserver;
import android.os.Handler;
import android.content.ContextWrapper;
import org.json.JSONException;
import org.json.JSONStringer;
import android.content.ContentResolver;
import android.content.Intent;
import android.content.BroadcastReceiver;
import android.database.Cursor;
import android.net.Uri;
import android.content.Context;
import android.os.RemoteException;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds;
import android.provider.ContactsContract.PhoneLookup;

请帮忙。

【问题讨论】:

    标签: java android sms broadcastreceiver


    【解决方案1】:

    您只能在 Context 对象上调用该方法。 试试这个:

    public class SMSObserver extends ContentObserver
    {
    SMSLogger smsLogger;
    Context context;
    
    public SMSObserver(SMSLogger smsLogger, Context c) {
        super(new Handler());
        context = c;
        this.smsLogger = smsLogger;
    }
    
    protected void querySMS() {
        Uri uriSMS = Uri.parse("content://sms/");
        Cursor cur = context.getContentResolver().query(uriSMS, null, null, null, null);
    }
    }
    

    【讨论】:

    • 谢谢.. +1 的解决方案
    【解决方案2】:

    扩展应用程序以保持上下文并静态访问它或者您可以将函数调用传递给 ContentResolver 中的每个库函数。目前你没有上下文引用,所以你不能在这里调用 getContentResolver()。

    【讨论】:

      猜你喜欢
      • 2015-05-26
      • 1970-01-01
      • 2022-11-03
      • 2014-09-14
      • 2020-06-08
      • 1970-01-01
      • 2012-08-07
      • 2013-09-07
      • 1970-01-01
      相关资源
      最近更新 更多