新建一个广播

PhoneStatReceiver.java

package talk.mft;import android.app.Service;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.telephony.TelephonyManager;import android.util.Log;public class PhoneStatReceiver extends BroadcastReceiver{        private static final String TAG = "PhoneStatReceiver";    @Override    public void onReceive(Context context, Intent intent) {            //如果是拨打电话    //Log.d(TAG, intent.getAction()+"");    TelephonyManager tm = (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);     Log.d(TAG, "status:"+tm.getCallState());    Log.d(TAG,"tele_state:"+intent.getStringExtra(TelephonyManager.EXTRA_STATE)+"");                  /*            if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){                                            incomingFlag = false;                    String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);                            Log.i(TAG, "call OUT:"+phoneNumber);                                    }else{                                             //如果是来电                    TelephonyManager tm =                         (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);                                                                switch (tm.getCallState()) {                    case TelephonyManager.CALL_STATE_RINGING:                            incomingFlag = true;//标识当前是来电                            incoming_number = intent.getStringExtra("incoming_number");                            Log.i(TAG, "RINGING :"+ incoming_number);                            break;                    case TelephonyManager.CALL_STATE_OFFHOOK:                                                            if(incomingFlag){                                    Log.i(TAG, "incoming ACCEPT :"+ incoming_number);                            }                            break;                                        case TelephonyManager.CALL_STATE_IDLE:                                                            if(incomingFlag){                                    Log.i(TAG, "incoming IDLE");                                                             }                            break;                    }             }            */        }}

在manifest 里注册并 附加权限

     <application>............<receiver android:name=".x.x.PhoneStatReceiver">  <intent-filter><action android:name="android.intent.action.PHONE_STATE"/>           <action android:name="android.intent.action.NEW_OUTGOING_CALL" /></intent-filter></receiver>            </application><uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>  <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission><uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"></uses-permission>

电话状态监听

public class CallReady extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);//----------- phone status listen/* 取得电话服务 */TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);//监听电话的状态telManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);//=====}//挂断电话private void endCall(){try{//通过反射拿到android.os.ServiceManager里面的getService这个方法的对象Method method = Class.forName("android.os.ServiceManager").getMethod("getService", String.class);//通过反射调用这个getService方法,然后拿到IBinder对象,然后就可以进行aidl啦IBinder iBinder = (IBinder) method.invoke(null, new Object[] {TELEPHONY_SERVICE});ITelephony telephony = ITelephony.Stub.asInterface(iBinder);telephony.endCall();}catch (Exception e){e.printStackTrace();}}//PhoneStateListener listener = new PhoneStateListener(){@Override  public void onCallStateChanged(int state, String incomingNumber) {      switch (state){        case TelephonyManager.CALL_STATE_IDLE: /* 无任何状态时 */        if(onCreateFlag){        Log.d(TAG,"xxxxxxxxx");//如果挂断        }        break;        case TelephonyManager.CALL_STATE_OFFHOOK: /* 接起电话时 */        if(onCreateFlag && curentTime >= 1){        Log.d(TAG,"gggggggggggg");//如果被接起        }                break;        case TelephonyManager.CALL_STATE_RINGING: /* 电话进来时 */         //Log.d(TAG,"rrrrrrrrrrrr");        break;        default:break;      }super.onCallStateChanged(state, incomingNumber);}        };//\}

更多相关文章

  1. android 按纽状态配置文件
  2. Android拒绝来电的实现--ITelephony类的反射
  3. 监听电话状态
  4. Android 状态栏透明
  5. android phone电话拨出上层java流程
  6. 获取android顶部状态栏高度的两种方式
  7. 清单文件,测试,打电话和发短信应用
  8. Android中打电话的数据流程

随机推荐

  1. Linux 之 crontab定时任务操作过程2016-1
  2. Linux比较两个文件之间的不同
  3. 【Ubuntu手记】开发多线程程序时在eclips
  4. Linux操作系统的I2C驱动
  5. linux查看硬件信息及驱动设备相关整理
  6. xshell连接linux与windows连接与传文件
  7. Linux进程通信[2]-互斥锁和条件变量
  8. linux运行命令缺少依赖库的查找方法
  9. 64位win 7装Linux虚拟机(RedHat)
  10. 看谁能找出bug★☆open函数总是返回-1