2012-04-15 6 views
0

und ich bin amgginer in Android-Programmierung und ich versuche, App zu erstellen, die SMS in eine Datei protokolliert. mit Iam ein Problem mit "Die Methode getContentResolver() ist nicht definiert für den Typ SMSObserver" und ich weiß nicht, warum ...SMS Logger: Methode getContentResolver() ist für den Typ

Hier ist der Code:

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...*/ 
} 
} 

und die Importe:

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; 

Bitte helfen Sie.

Antwort

4

Sie können diese Methode nur für das Context-Objekt aufrufen. Try this:

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); 
} 
} 
+0

Danke .. +1 für die Lösung –

0

Anwendung Extend halten, einen Kontext zu halten und den Zugang statisch Oder Sie können Funktionsaufruf an jeder Bibliotheksfunktion in ContentResolver passieren. Derzeit haben Sie keine Kontextreferenz, daher können Sie getContentResolver() hier nicht aufrufen.