我有一个监听来电的应用程序。该应用程序有一个数据库,其中包含自己的联系人姓名和号码。
当您接到来电时,如果来电号码(例如,1234)在本机联系人数据库中不可用,则应用程序会在其数据库中检查它并从数据库中查找联系人姓名(如果其中有可用号码)。(比如说,xyz)...
我的目标是用新的联系人姓名刷新呼叫屏幕,说“xyz 呼叫..”而不是“1234 呼叫..”..
可能吗??..
我有一个监听来电的应用程序。该应用程序有一个数据库,其中包含自己的联系人姓名和号码。
当您接到来电时,如果来电号码(例如,1234)在本机联系人数据库中不可用,则应用程序会在其数据库中检查它并从数据库中查找联系人姓名(如果其中有可用号码)。(比如说,xyz)...
我的目标是用新的联系人姓名刷新呼叫屏幕,说“xyz 呼叫..”而不是“1234 呼叫..”..
可能吗??..
无法刷新来电屏幕,但您可以通过获取自己的数据库来显示所需的名称...为此,您需要在来电屏幕上运行自己的线程,我使用 Timer 和 Timer Task 来执行此操作这是示例
您的 BroadcastReceiver 应包含
ServiceReceiver extends BroadcastReceiver{
@Override
public void onReceive(final Context context, Intent intent) {
Bundle extras = intent.getExtras();
if (extras != null) {
String state = extras.getString(TelephonyManager.EXTRA_STATE);
incomingNumber = extras.getString("incoming_number");
if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
/********** Fetch name from your DB ************/
if (Name not present in your DB)
{
return;
}
if(present){
incomingCallTimer = new Timer();
ToastMessageHandler messageHandler = new ToastMessageHandler(context, contactName);
incomingCallTimer.schedule(new ToastTimer(messageHandler), 1000, 2000);
}
}
if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
// callActionHandler.removeCallbacks(runRingingActivity);
// setResultCode(Activity.RESULT_CANCELED);
try{
incomingCallTimer.cancel();
} catch (Exception e) {
}
}
}
class ToastTimer extends TimerTask {
ToastMessageHandler messageHandler;
public ToastTimer(ToastMessageHandler messageHandler) {
this.messageHandler = messageHandler;
}
@Override
public void run() {
Message message = Message.obtain(messageHandler);
messageHandler.sendMessage(message);
}
}
}
Toast 处理程序类
public class ToastMessageHandler extends Handler{
Context context;
String message;
public ToastMessageHandler(Context _context , String _message){
this.context = _context;
this.message = _message;
}
@Override
public void handleMessage(Message msg) {
Toast.makeText(msg);
}
}