吐司消息android
我试图弹出一个吐司消息,只要电话响起,并摧毁他们的电话被拒绝或回答。吐司消息android
在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();
}
}
的问题是,呼叫被挂起来后连敬酒消息保持坡平了。这就像状态永远不会处于HANG_UP或IDLE模式。
我做错了什么?
在收到您的使用广泛投recievere这
@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();
}
}
我不明白。什么是C类?这段代码在做什么? – user1222905 2012-04-18 10:03:44
c是类的对象,更多请参阅http://developer.android.com/reference/java/lang/Class.html – vipin 2012-04-18 10:07:04
你不能只是做Class c = tm.getClass(); ? – Urho 2012-04-18 11:28:51
这是吐司功能的错误使用。你应该找到另一种方式去做任何你想做的事情。
我认为最符合您需要的是PopupWindow。查看文档。
为什么是错误的用法? pupupwindows做什么? – user1222905 2012-04-18 10:04:14
Toast将在预定义的持续时间内显示,即LENGTH_LONG或SHORT ..您需要事先定义持续时间。 – Ronnie 2012-04-18 10:22:23
我猜RINGING广播多次发送,你的Toast排队等候。其中一人被取消,其余人员继续显示全部时间... – Ronnie 2012-04-18 10:25:52
使用别的东西popupwindow,对话框.. – MKJParekh 2012-04-18 10:47:20