gpt4 book ai didi

android content observer - onChange 方法检查最后一次通话是否未接来电

转载 作者:行者123 更新时间:2023-11-30 03:36:39 24 4
gpt4 key购买 nike

我正在开发一个 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 数据库检查最后一次通话时做的更好?

最佳答案

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

@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,则提供的方式看起来很好。

另一个建议是实现服务来检查未接来电计数,这样您就不会在 ContentObserver 中进行长时间的处理。

关于android content observer - onChange 方法检查最后一次通话是否未接来电,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16582577/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com