要监听android打电话和接电话,只需下面2步骤
1.第一步,写一个Receiver继承自BroadcastReceiver

1.
2. public class PhoneStatReceiver extends BroadcastReceiver{

3.

4. private static final String TAG = "PhoneStatReceiver";

5.

6. // private static MyPhoneStateListener phoneListener = new MyPhoneStateListener();

7.

8. private static boolean incomingFlag = false;

9.

10. private static String incoming_number = null;

11.
12. @Override

13. public void onReceive(Context context, Intent intent) {

14. //如果是拨打电话

15. if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){

16. incomingFlag = false;

17. String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);

18. Log.i(TAG, "call OUT:"+phoneNumber);

19. }else{

20. //如果是来电

21. TelephonyManager tm =

22. (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);

23.

24. switch (tm.getCallState()) {

25. case TelephonyManager.CALL_STATE_RINGING:

26. incomingFlag = true;//标识当前是来电

27. incoming_number = intent.getStringExtra("incoming_number");

28. Log.i(TAG, "RINGING :"+ incoming_number);

29. break;

30. case TelephonyManager.CALL_STATE_OFFHOOK:

31. if(incomingFlag){

32. Log.i(TAG, "incoming ACCEPT :"+ incoming_number);

33. }

34. break;

35.

36. case TelephonyManager.CALL_STATE_IDLE:

37. if(incomingFlag){

38. Log.i(TAG, "incoming IDLE");

39. }

40. break;

41. }

42. }

43. }

44. }


复制代码
第二步:在AndroidManifest.xml,配置写好的Receiver,并拦截相应的BroadCastAction,
另外注意加上相应的权限。

1.
2. <receiver android:name=".filter.PhoneStatReceiver">

3. <intent-filter>

4. <action android:name="android.intent.action.PHONE_STATE"/>

5. <action android:name="android.intent.action.NEW_OUTGOING_CALL" />

6. </intent-filter>

7. </receiver>

8.
9. <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>

10. <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"></uses-permission>


复制代码
对于来电状态的变化,用户可以在上面的例子代码中,加入自己想要实现的逻辑。
来电分三种状态:
CALL_STATE_RINGING:来电响铃
CALL_STATE_OFFHOOK:摘机
CALL_STATE_IDLE:挂机
去电的话,这里只监听了电话拨打出去,至于拨打出去的电话,是否被接通,看来android的一些相关文档,
好像都没有这样一个可拦截的状态变化,不知道有没有人实现过去电状态变化的监听。

如果有的话,还望提供思路!!


lz写的帖子很好,来电的状态在很多的资料中都可以看到,可以根据不同的状态进行一系列的处理。但是去电的状态到现在始终都没有获取。来电是用的是 onCallStateChanged(int state, String incomingNumber)方法,我看了源代码PhoneStateListener类中的这个方法只有那三个状态,没有其他关于去电的状态。而且也 没有其他的方法获取去电的电话状态以及电话号码。所以得到去电的状态一定不是在PhoneStateListener这个类中了,到底怎么获取去电的状态 呢?很着急呀?哪位高手指点一下呀


关于判断去电或者来电接通状态的方法在源代码中是有的~但是标记有@hide标签,也就是这个Api是隐藏的不能直接调用,我也在寻找调用这些隐藏Api的方法


已经成功了

if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL))

{

mCallEvent = CALL_EVENT_OUTGOING;

mCallNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
Log.i(TAG, "call OUT:" + mCallNumber);

AskCallStateThread callStateThread = new AskCallStateThread(context);
callStateThread.start();

}



private class AskCallStateThread extends Thread

{

private static final String TAG = "AskCallStateThread";



public AskCallStateThread(Context aContext) {

mContext = aContext;

}



Context mContext = null;

private Timer mTimer = new Timer(true);



private TimerTask mTimerTask = new TimerTask() {

@Override

public void run() {

TelephonyManager tm =

(TelephonyManager)mContext.getSystemService(Service.TELEPHONY_SERVICE);



int nState = tm.getCallState();

Log.i(TAG, "mTelManager.getCallState = " + nState);

if (nState == TelephonyManager.CALL_STATE_IDLE)

{

while (!mTimerTask.cancel())

mTimer.cancel();

}

}

};



@Override

public void run() {

mTimer.schedule(mTimerTask, 1000, 1000);

}

}

你的代码不能区分对方是否接听,或者打不通,或者对方挂机,或者进入留言信箱

去电接通这个状态确实没有监听到,每次刚拨出去,状态就变更了,网上找了下,貌似确实没有一个好的解决方案,而且我发现很多软件只能监听GSM网络的,不知为何

更多相关文章

  1. :activity状态的保存和保持
  2. Android(安卓)系统常用权限
  3. 使用saripaar对android输入控件进行快速验证
  4. android 来电自动接听和自动挂断
  5. 转 Android中shape中的属性大全
  6. 如何去掉状态栏和内容视图之间的黑色阴影线
  7. Android(安卓)--- Activity生命周期
  8. Android(安卓)MediaPlayer 常用方法介绍
  9. Android设置通知栏/状态栏透明改变通知栏颜色和app最上部分颜色

随机推荐

  1. ubuntu genymotion 启动adb 被占用5037端
  2. Android(安卓)进程间通信实现原理分析
  3. Android(安卓)Studio中TextView文本过长
  4. 一键锁屏
  5. 解决Android(安卓)SwipeRefreshLayout &
  6. 解决android.content.res.Resources NotF
  7. android之简单数据存储Preference
  8. Android常用UI
  9. Android(安卓)Permission访问权限许可
  10. android之JSON解析(一)