Android内容查看器-onChange方法检查上一个呼叫是否未接
作者:互联网
我正在开发一个android应用,我需要增加未接来电.
我注册了ContentObserver.如果呼叫是未接来电,如何检查onChange方法?
我有一个带有以下代码的contentobserver:
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数据库中的上一个呼叫时更好吗?
解决方法:
我建议尝试使用以下代码来确定“是否错过了上次通话”:
@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;
}
}
如果您只需要检查最近的呼叫,那将比检查所有呼叫更快.但是,如果没有uri,则提供的方法看起来不错.
另一个建议是实现Service来检查未接来电计数,因此您在ContentObserver中不会进行长时间的处理.
标签:android,calllog 来源: https://codeday.me/bug/20191009/1882531.html