2012-05-03 90 views
2

我有一个应用程序来监听来电。该应用程序拥有一个拥有自己的联系人姓名和号码的数据库。是否可以刷新inCall屏幕?

当您收到来电时,如果传入号码(例如1234)在本地联系人数据库中不可用,应用程序会在其数据库中检查它,并在数据库中存在联系人姓名(如果该号码可用)中找到联系人姓名。 (比如说,XYZ)...

我的目标是刷新新的联系人姓名并称门店屏“某某电话。”而不是“1234呼叫..” ..

是否有可能? ..

+0

看看在[类似的问题(http://stackoverflow.com/q/2385685/1321873),答案是适合你的情况,以及 – Rajesh

+0

@Rajesh感谢您的回复。但我不想更换inCall屏幕..我的目标是用更新后的联系人姓名刷新屏幕界面。 – thoma

回答

0

它无法刷新来电屏幕但你可以通过获取自己的数据库......对于u需要运行呼入电话屏幕上乌尔自己的线程显示所需的名字,我用定时器和计时器任务这样做这里是示例

您的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); 



    } 

    } 
} 

吐司Handler类

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); 
} 
} 
+0

感谢您的帮助..正如您所提到的,我的情况中唯一的选择是有一个吐司。我找不到任何方法刷新入口筛子。 – thoma

+0

如果你有更好的解决方案,请分享。 – png

+0

@Preetha或U可以使用ITelephony类来创建你自己的来电Activty,对于u需要添加的.jar framework_intermediates类,全debug.jar – Pradeep