Android学习篇章32-Broadcast广播基础-通话监听
2013-11-02 19:55
453 查看
Mainactivity:
MyCallingBroadcastReceiver:
权限与注册:
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } TelephonyManager tm=null; @Override protected void onResume() { if(tm==null) { tm=(TelephonyManager)this.getSystemService(Service.TELEPHONY_SERVICE); //注册监听器 tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE); } super.onResume(); } @Override protected void onPause() { //取消监听 // if(tm!=null) // tm.listen(null, PhoneStateListener.LISTEN_CALL_STATE); super.onPause(); } PhoneStateListener listener=new PhoneStateListener() { //手机通话状态发生改变时会执行 @Override public void onCallStateChanged(int state, String incomingNumber) { // TODO Auto-generated method stub switch(state) { case TelephonyManager.CALL_STATE_IDLE: //空闲状态 Log.i("test", "-----电话处于空闲状态 电话:"+incomingNumber); break; case TelephonyManager.CALL_STATE_RINGING: //响铃状态 Log.i("test", "----电话响铃了 电话:"+incomingNumber); break; case TelephonyManager.CALL_STATE_OFFHOOK: //摘机 也就是通话中 Log.i("test", "-----电话通话中 电话:"+incomingNumber); break; } //super.onCallStateChanged(state, incomingNumber); } }; @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
MyCallingBroadcastReceiver:
public class MyCallingBroadcastReceiver extends BroadcastReceiver { //监听打出去电话的广播 public static final String NEW_OUT_CALL="android.intent.action.NEW_OUTGOING_CALL"; //通话状态的改变 public static final String PHONE_STATE="android.intent.action.PHONE_STATE"; @Override public void onReceive(Context context, Intent intent) { String action=intent.getAction(); if(NEW_OUT_CALL.equals(action)) { //获得对方号码 String to=intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); Log.i("test", "正在打出电话,对方号码"+to); Toast.makeText(context, "正在打出电话,对方号码"+to, Toast.LENGTH_LONG).show(); }else if(PHONE_STATE.equals(action)) { //拨打电话 也就是当前手机处于主叫方 将不会有响铃状态 //电话处于被叫方 三种状态都会有 //获得通话服务 //获得被叫时 拨入进来的手机号码 Bundle data=intent.getExtras(); Set<String> keys=data.keySet(); for(String key : keys) { Log.i("test", "key="+key); } //只有在被叫时 响铃状态才有 String phone=intent.getStringExtra("incoming_number"); TelephonyManager tm=(TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE); int phonestate=tm.getCallState(); //int phonestate=intent.getIntExtra("state", 0); switch(phonestate) { case TelephonyManager.CALL_STATE_IDLE: //空闲状态 Log.i("test", "电话处于空闲状态 电话:"+phone); break; case TelephonyManager.CALL_STATE_RINGING: //响铃状态 Log.i("test", "电话响铃了 电话:"+phone); break; case TelephonyManager.CALL_STATE_OFFHOOK: //摘机 也就是通话中 Log.i("test", "电话通话中 电话:"+phone); break; } } } }
权限与注册:
<!-- 获得读取通话状态的许可权限 --> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <!-- 获得处理打出电话的许可权限 --> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.calling.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="com.calling.MyCallingBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.PHONE_STATE"/> <action android:name="android.intent.action.NEW_OUTGOING_CALL"/> </intent-filter> </receiver> </application>
相关文章推荐
- Android学习篇章31-Broadcast广播基础-短信监听
- Android学习篇章57-广播BroadcastReceiver短信监听
- Android学习篇章28-Broadcast广播基础-BroadcastReceiver
- Android学习篇章29-Broadcast广播基础-自定义广播(静态广播)
- Android学习篇章30-Broadcast广播基础-自定义广播(动态广播)
- Android学习篇章35-Service基础-广播开机启动服务
- Android学习篇章59-广播BroadcastReceiver-闹钟
- Android学习札记52:广播(Broadcast)基础篇
- Android基础进阶之Broadcast(广播接受者)的学习和研究
- Android 广播接收器学习之监听网络变化
- Android系统中的广播(Broadcast)机制简要介绍和学习计划 .
- Android基础学习之BroadcastRceiver广播
- Android实现监听手机通话--仅供学习使用--
- Android系统中的广播(Broadcast)机制简要介绍和学习计划
- Android系统中的广播(Broadcast)机制简要介绍和学习计划
- Android学习小记----监听电量的变化(不能静态注册的广播), 保持Service不被杀死的好方法
- Android系统中的广播(Broadcast)机制简要介绍和学习计划
- Android开发学习总结(1.21-广播机制Broadcast)
- [Android新手学习笔记29]-Broadcast-例二广播实习开机自启动
- android基础学习之广播