当前位置:编程学习 > wap >>

android开发,监听来电显示求解决!!!!!

最近在做一个关于来电显示的监控,要实现,在有电话打来时,跳出一个悬浮框用来显示自己的一些提示信息,监控可以成功(监控不在Activity里面,是自定义方法通过广播实现),但悬浮框无法实现,怎么才能出来一个悬浮框,???求大神指导。。。。
public class TeleListenerReceiver extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Log.e("show", "加载广播");
TelephonyManager mTelePhonyMgr=(TelephonyManager)context.getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);
//获取系统服务
Log.e("show", "加载广播...");
mTelePhonyMgr.listen(new TeleListener(context), PhoneStateListener.LISTEN_CALL_STATE);
}

}
===============================================================
public class TeleListener extends PhoneStateListener {
private static String IMSI;
private Context context;
private WindowManager wm;
// private TextView tv;
LinearLayout mFloat;
LayoutInflater minflater;

public TeleListener(Context context) {
// TODO Auto-generated constructor stub
this.context = context;
}

@Override
public void onCallStateChanged(int state, String incomingNumber) {
// TODO Auto-generated method stub
Log.e("show", "通话监听");

super.onCallStateChanged(state, incomingNumber);

switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
Log.e("show", "来点电话" + incomingNumber);
// 通话结束移除弹框
popPhoneRemover();
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.e("show", "电话刮起");
break;
case TelephonyManager.CALL_STATE_RINGING:
Log.e("show", "来点电话" + incomingNumber);
popPHone(incomingNumber);
break;
default:
break;
}
}

private void popPHone(String phone) {
wm = (WindowManager) context.getApplicationContext().getSystemService(
Context.WINDOW_SERVICE);
minflater = (LayoutInflater) context.getApplicationContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// minflater=LayoutInflater.from((Context)
// context.getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE));
mFloat = (LinearLayout) minflater.inflate(R.layout.float_window, null);
// tv=(TextView) mFloat.findViewById(R.id.show);
// tv.setText(phone);
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.type = WindowManager.LayoutParams.TYPE_PHONE;
params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.format = PixelFormat.RGBA_8888;

// wm.addView(mFloat, (android.view.ViewGroup.LayoutParams) wm);
wm.addView(mFloat, (LayoutParams) wm);

}

private void popPhoneRemover() {
wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
if (wm != null) {
wm.removeView(mFloat);
}
}

} --------------------编程问答-------------------- 没有activity貌似弹不出浮窗吧,都没有设定一个具体的组件或者activity来参照浮窗弹出的位置,桌面或者启动器的桌面又不能捕捉的到,所以鄙人觉得做不到,至少得要有个activity --------------------编程问答-------------------- 设置一个空的activity,在空的activity上显示你要显示的提示框。 --------------------编程问答-------------------- 你们说的我都知道,我有在尝试但还是没有成功。谢谢 --------------------编程问答-------------------- http://blog.csdn.net/shinay/article/details/7783276   
进行简单的修改就行了。 --------------------编程问答-------------------- 刚才试了一下,没问题的。就是把button改成你自己定义的界面。另外要加上权限。 --------------------编程问答-------------------- 没有activity你的button怎么加进去的?另外我有自定义xml自己的页面啊。
minflater = (LayoutInflater) context.getApplicationContext()
 .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

 mFloat = (LinearLayout) minflater.inflate(R.layout.float_window, null); --------------------编程问答--------------------
引用 5 楼 birdfly12345 的回复:
刚才试了一下,没问题的。就是把button改成你自己定义的界面。另外要加上权限。

没有activity你的button怎么加进去的?另外我有自定义xml自己的页面啊。
minflater = (LayoutInflater) context.getApplicationContext()
  .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

  mFloat = (LinearLayout) minflater.inflate(R.layout.float_window, null);  --------------------编程问答--------------------
引用 7 楼 u011925823 的回复:
Quote: 引用 5 楼 birdfly12345 的回复:

刚才试了一下,没问题的。就是把button改成你自己定义的界面。另外要加上权限。

没有activity你的button怎么加进去的?另外我有自定义xml自己的页面啊。
minflater = (LayoutInflater) context.getApplicationContext()
  .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

  mFloat = (LinearLayout) minflater.inflate(R.layout.float_window, null); 

界面显示的本质是WindowManager,就是说Toast和Activity组件的界面显示最终都是调用的WindowManager。所以你把界面写到WindowManager是可以的。 --------------------编程问答--------------------
引用 8 楼 birdfly12345 的回复:
Quote: 引用 7 楼 u011925823 的回复:

Quote: 引用 5 楼 birdfly12345 的回复:

刚才试了一下,没问题的。就是把button改成你自己定义的界面。另外要加上权限。

没有activity你的button怎么加进去的?另外我有自定义xml自己的页面啊。
minflater = (LayoutInflater) context.getApplicationContext()
  .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

  mFloat = (LinearLayout) minflater.inflate(R.layout.float_window, null); 

界面显示的本质是WindowManager,就是说Toast和Activity组件的界面显示最终都是调用的WindowManager。所以你把界面写到WindowManager是可以的。
能给个简单的DEMO不?我自己定义的都不能实现。 --------------------编程问答-------------------- 使用dialog可以么
补充:移动开发 ,  Android
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,