android 之电话监听
2011-09-25 20:49
323 查看
在android中,要监听来电与去电是比较简单的,至少有如下两种方法。
1. Receiver
定义一个Receiver派生类,并指定action:android.intent.action.PHONE_STATE即可, 直接上代码。
Note:去电需要在manifest文件中加上action: android.intent.action.NEW_OUTGOING_CALL
2.利用系统服务TelephonyManager。
利用TelephonyManager::listen注册一个listeners来监听电话状态,listen原型如下,
void listen
(PhoneStateListener listener, int events)
其中events可设为:PhoneStateListener.LISTEN_CALL_STATE。
完整代码如下:
在模拟器测试该代码,可以通过DDMS Emulator Control模拟电话拨入。
注意:两种方法都需要加上READ_PHONE_STATE 权限。
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
1. Receiver
定义一个Receiver派生类,并指定action:android.intent.action.PHONE_STATE即可, 直接上代码。
public class PhoneStateReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String phoneNumber = intent .getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) { Toast.makeText(context, "Receiver" + phoneNumber + " 去电", Toast.LENGTH_SHORT).show(); } else { TelephonyManager tm = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE); switch (tm.getCallState()) { case TelephonyManager.CALL_STATE_RINGING: Toast.makeText(context, "Receiver" + phoneNumber + " 来电", Toast.LENGTH_SHORT).show(); break; case TelephonyManager.CALL_STATE_OFFHOOK: Toast.makeText(context, "Receiver 正在通话", Toast.LENGTH_SHORT).show(); break; default: break; } } } }
Note:去电需要在manifest文件中加上action: android.intent.action.NEW_OUTGOING_CALL
2.利用系统服务TelephonyManager。
利用TelephonyManager::listen注册一个listeners来监听电话状态,listen原型如下,
void listen
(PhoneStateListener listener, int events)
其中events可设为:PhoneStateListener.LISTEN_CALL_STATE。
完整代码如下:
public class PhoneStateMonitorActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); tm.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE); } class MyPhoneStateListener extends PhoneStateListener { @Override public void onCallStateChanged(int state, String incomingNumber) { switch (state) { case TelephonyManager.CALL_STATE_RINGING: Toast.makeText(PhoneStateMonitorActivity.this, incomingNumber + " 来电", Toast.LENGTH_SHORT).show(); break; case TelephonyManager.CALL_STATE_OFFHOOK: Toast.makeText(PhoneStateMonitorActivity.this, "正在通话", Toast.LENGTH_SHORT).show(); break; default: break; } super.onCallStateChanged(state, incomingNumber); } } }
在模拟器测试该代码,可以通过DDMS Emulator Control模拟电话拨入。
注意:两种方法都需要加上READ_PHONE_STATE 权限。
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
相关文章推荐
- Android广播接实现监听电话状态(电话的状态,拦截)
- Android-电话监听工具
- Ohone/android 监听电话
- Android电话监听
- 监听有线/蓝牙耳机的插入与拔出,电话的状态及拦截-Android
- Android 对电话进行监听和挂断
- android 2.1 监听电话状态并自动接听来电
- Android广播接实现电话的监听(电话的状态,拦截)
- Android电话拦截实现以及TelephonyManager监听的取消
- 【Android学习日记】(九) 监听电话的例子
- android 电话状态的监听(来电和去电)
- Android 监听电话去电接通瞬间[非来电]
- android 电话状态的监听
- android 使用广播接收者监听短信和拦截外拨电话
- android电话状态监听
- Android电话拦截实现以及TelephonyManager监听的取消
- android 呼入电话的监听(来电监听)
- android 监听电话状态
- 监听android电话呼叫状态