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();
    }
    }
4

1 に答える 1

0

を使用してContextを呼び出しますcontentResolver()。そんな感じ:

context.getContentResolver()....
于 2013-10-29T10:53:32.113 に答える