2013-10-29 2 views
0

전화 통화 상태 및 로그를 추적하려고합니다. 전화 번호, 이름 (저장된 연락처 인 경우) 및 통화 시간 및 기간이 필요합니다. 문제는 getContentResolver() 메서드를 호출 할 수 없다는 것입니다. 코드에 주석 처리되어 있습니다.전화 통화 추적

public class PhoneStateBroadcastReciever extends BroadcastReceiver { 
Context m_context; 

String m_number = null; 
String m_startTime = null; 
String m_endTime = null; 

SharedPreferences m_sharedPrefs; 
Editor editor; 

static String PREFS_NUMBER; 
static String PREFS_START_TIME; 
static String PREFS_END_TIME; 



@Override 
    public void onReceive(Context context, Intent intent) { 
    m_sharedPrefs = m_context.getSharedPreferences("MyPrefs", 0); 
    editor = m_sharedPrefs.edit(); 

    Bundle bundle = intent.getExtras(); 
    if (bundle == null) 
     return; 

    String state = bundle.getString(TelephonyManager.EXTRA_STATE); 

    if ((state != null) && 
      (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING))) { 
     Log.i("TAG", "incoming call"); 

     Uri contactUri = intent.getData(); 
     String[] projection = { Phone.DISPLAY_NAME }; 
     //i cannot use getContentResolver() 
     Cursor cursor = getContentResolver()..query(contactUri, projection, null, 
                 null, null); 

     int columnName = cursor.getColumnIndex(Phone.DISPLAY_NAME); 
     String contactName = cursor.getString(columnName); 

     m_number = bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER); 

     editor.putString(PREFS_NUMBER, m_number); 
     editor.commit(); 

    } else if(state == null) { 
     Log.i("TAG", "outgoing call"); 

     Uri contactUri = intent.getData(); 
     String[] projection = { Phone.DISPLAY_NAME }; 
     //i cannot use getContentResolver() 
     Cursor cursor = getContentResolver()..query(contactUri, projection, null, 
                 null, null); 

     int columnName = cursor.getColumnIndex(Phone.DISPLAY_NAME); 
     String contactName = cursor.getString(columnName); 

     m_number = bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER); 

     editor.putString(PREFS_NUMBER, m_number); 
     editor.commit(); 

    } else if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_OFFHOOK)) { 
     Log.i("TAG", "off hook"); 

     Time dtstart = new Time(Time.getCurrentTimezone()); 
     dtstart.setToNow(); 

     m_startTime = dtstart.format("%k:%M:%S"); 

     editor.putString(PREFS_START_TIME, m_startTime); 
     editor.commit(); 

    } else if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_IDLE)) { 
     Log.i("TAG", "on idle"); 

     Time dtend = new Time(Time.getCurrentTimezone()); 
     dtend.setToNow(); 

     m_endTime = dtend.format("%k:%M:%S"); 

     editor.putString(PREFS_END_TIME, m_endTime); 
     editor.commit(); 
    } 


    } 

this is the service class: 

    public class TrackerService extends Service { 
    PhoneStateBroadcastReciever receiver; 

    @Override 
    public void onCreate() { 
    receiver = new PhoneStateBroadcastReciever(); 

    IntentFilter filter = new IntentFilter(); 
    filter.addAction(android.telephony.TelephonyManager.ACTION_PHONE_STATE_CHANGED); 
    registerReceiver(receiver, filter); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
    Toast.makeText(this, "starting service", Toast.LENGTH_SHORT).show(); 
    return Service.START_NOT_STICKY; 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    return null; 
    } 

    @Override 
    public void onDestroy() { 
    unregisterReceiver(receiver); 
    Toast.makeText(this, "service done", Toast.LENGTH_SHORT).show(); 
    } 
    } 

답변

0

contentResolver()를 호출 Context를 사용합니다. 뭔가 그런 :

context.getContentResolver().... 
+0

나는 그것을 결코 생각하지 않을 것이다. – pavle

+0

그것이 도움이 되었습니까? ... –

+0

도움이된다면 pls는 대답을 수락합니다. –