AndroidManifest.xml
android:name=".MyReceiver"
android:enabled="true"
android:exported="true"
>
注册监听器mMyReceiver = new MyReceiver();
Log.e(TAG, "registerReceiver() mMyReceiver=" + mMyReceiver);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED);
intentFilter.setPriority(Integer.MAX_VALUE);
Intent intent = registerReceiver(mMyReceiver, intentFilter);
Log.e(TAG, "registerReceiver() intent=" + intent);注销监听器
unregisterReceiver(mMyReceiver);
Log.e(TAG, "unregisterReceiver() mMyReceiver=" + mMyReceiver);实现监听器
public class MyReceiver extends BroadcastReceiver {
public final String TAG = "MyReceiver";
private WindowManager mWinMgr;
private TextView mTxtView;
public MyReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
Log.e(TAG, "intent.action=" + intent.getAction());
if (intent.getAction().equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED)) {
String phoneNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
int state = telephony.getCallState();
Log.e(TAG, "state=" + state + ",phoneNumber=" + phoneNumber);
switch (state) {
case TelephonyManager.CALL_STATE_RINGING:
Log.e(TAG, "CALL_STATE_RINGING=" + state);
mWinMgr = (WindowManager) context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
params.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.format = PixelFormat.RGBA_8888;
mTxtView = new TextView(context);
mTxtView.setText("悬浮窗,来电号码:" + phoneNumber);
//mTxtView.setBackgroundColor(0x00000000);
mTxtView.setTextColor(0xFFFFFFFF);
mWinMgr.addView(mTxtView, params);
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.e(TAG, "CALL_STATE_OFFHOOK=" + state);
if (mWinMgr != null) {
mWinMgr.removeView(mTxtView);
}
break;
case TelephonyManager.CALL_STATE_IDLE:
Log.e(TAG, "CALL_STATE_IDLE=" + state);
if (mWinMgr != null) {
mWinMgr.removeView(mTxtView);
}
break;
default:
Log.e(TAG, "default state=" + state);
if (mWinMgr != null) {
mWinMgr.removeView(mTxtView);
}
break;
}
}
}
}
参考:http://blog.csdn.net/forlong401/article/details/19126875