1

我正在开发一个 android 应用程序,我需要增加未接来电。

我注册了一个 ContentObserver。如果呼叫是未接来电,我如何检查 onChange 方法?

我有一个包含以下代码的内容观察器:

public class IncomingCall extend BroadcastReceiver
{
public void onReceive( final Context context, Intent intent)
{
String state= extras.getString(TelephonyManager.EXTRA_STATE);
    if (TelephonyManager.EXTRA_STATE_IDLE.equals(state))
        {
            context.getApplicationContext().getContentResolver().registerContentObserver(android.provider.CallLog.Calls.CONTENT_URI, true, new CallContentObserver(new Handler(), context));
        }

}

 class CallContentObserver extends ContentObserver {

    Context context;

    public CallContentObserver(Handler handler, Context context) {
        super(handler);
        this.context = context;
    }

    @Override
    public boolean deliverSelfNotifications() {
        return true;
    }

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

        //flag for missed calls
        how to check if last call is missed call?

Cursor c = context.getContentResolver().query(CallLog.Calls.CONTENT_URI,null,null, null, null);
        int type = c.getColumnIndex(CallLog.Calls.TYPE);
        while (c.moveToNext()) {
            String callType = c.getString(type);

            int dircode = Integer.parseInt(callType);
            switch (dircode) {

            case CallLog.Calls.MISSED_TYPE:
                flag++;

            }
            break;
        }

}

难道没有其他方法可以做到这一点吗?(比我从 CallLog 数据库检查最后一次通话时做得更好?

4

1 回答 1

1

我建议尝试以下代码以确定“最后一次通话是否未接来电”:

@Override
public void onChange(boolean selfChange, Uri uri) {

    if (null == uri) {
        onChange(selfChange);
        return;
    }

    super.onChange(selfChange, uri);

    final Cursor c = context.getContentResolver().query(uri,null,null, null, null);
    final int type = c.getColumnIndex(CallLog.Calls.TYPE);
    final int dircode = c.getInt(type);

    switch (dircode) {
        case CallLog.Calls.MISSED_TYPE:
            flag++;
            break;
    }
}

如果您只需要检查最近的通话,它会比检查所有通话更快。但是,如果 where 没有 uri,那么提供的方式看起来不错。

另一个建议是实施 Service 来检查未接来电计数,这样您就不会在ContentObserver.

于 2013-05-16T09:19:53.510 回答