0

只要电话响起并销毁敬酒,我就会尝试弹出敬酒消息,电话被拒绝或接听。

OnReceive方法中我有这样的东西:

Bundle bundle=intent.getExtras();
final String state=bundle.getString(TelephonyManager.EXTRA_STATE);

if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING))
{
  Toast toast= new Toast(context);
  toast.show();

  new CountDownTimer(3500,1000)
{

@Override
public void onFinish()
{
  if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_IDLE)||
     (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_OFFHOOK))
  {
    toast.cancel();
  }
  else
  {
    toast.setDuration(Toast.LENGTH_LONG);
    toast.show();
    start();
  }
}

问题是,即使在挂断电话后,toast 消息也会不断弹出。就像状态永远不会处于 HANG_UP 或 IDLE 模式。

我做错什么了?

4

2 回答 2

0

在你的广播接收器中使用这个

 @Override
            public void onReceive(Context context, Intent intent) {
               Log.d("INCOMING", "service start");
               TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
               try {
                 Class c = Class.forName(tm.getClass().getName());
                 Method m = c.getDeclaredMethod("getITelephony");
                 m.setAccessible(true);
               //  telephonyService = (ITelephony) m.invoke(tm);
                 Bundle bundle = intent.getExtras();
                 String phoneNumber = bundle.getString("incoming_number");

                 Log.d("INCOMING", phoneNumber);

                 if ((phoneNumber != null) && !phoneNumber.equals(selectedtednumber)) { 
                     Toast.makeText(context, "Someone other calling sending to voice mail ...", Toast.LENGTH_LONG).show();
                     sendToVoiceMail();
                 }
}
于 2012-04-18T10:01:37.800 回答
0

这是对 Toast 功能的错误使用。你应该找到另一种方法来做你想做的任何事情。

我认为最符合您需要的是PopupWindow。查看文档。

于 2012-04-18T10:02:01.280 回答