2026年11月1日 · 今日 0 帖 · 会员 6.1万 · 主题 17.4万
登录 · 注册 · 游客,欢迎随便逛逛
返回版块
1000
Lv9有为九子能等级图标
勋章勋章勋章勋章勋章
帖子
9.3万
回复
2,089
积分
60.3万
注册
2006-12-06
[怀旧国机]

Android实现通话监听的方法

[复制链接]
查看 495 回复 5
楼主 发表于 | 只看该作者
12 人收藏

对智能手?有所了解的朋友都知道其中一个应用广泛的手机操作系统android 开源手机操作系统。那么在这一系统中想要实现通话的监听功能的话,我们应当如何操作呢?在这里就为大家详细介绍了android监听通话的相关实现方法。

  开发应用程序的时候,我们希望能够监听电话的呼入,以便执行暂停音乐播放器等操作,当电话结束之后,再次恢复播放。在android平台可以通过 telephonymanager和phonestatelistener来完成此任务。

  telephonymanager作为一个service接口提供给用户查询电话相关的内容,比如imei,linenumber1等。通过下面的代码即可获得telephonymanager的实例。

  telephonymanager mtelephonymgr = (telephonymanager) this

  .getsystemservice(context.telephony_service);

  在android平台中,phonestatelistener是个很有用的******,用来监听电话的状态,比如呼叫状态和连接服务等。android监听通话方法如下所示:

  public void oncallforwardingindicatorchanged(boolean cfi)

  public void oncallstatechanged(int state,

  string incomingnumber)

  public void oncelllocationchanged(celllocation location)

  public void ondataactivity(int direction)

  public void ondataconnectionstatechanged(int state)

  public void onmessagewaitingindicatorchanged(boolean mwi)

  public void onservicestatechanged

  (servicestate servicestate)

  public void onsignalstrengthchanged(int asu)

  这里我们只需要覆盖oncallstatechanged()方法即可监听呼叫状态。在telephonymanager中定义了三种状态,分别是振铃(ringing),摘机(offhook)和空闲(idle),我们通过state的值

就知道现在的电话状态了。

  获得了telephonymanager接口之后,调用listen()方法即可实现android监听通话。

  mtelephonymgr.listen(new telelistener(),

  phonestatelistener.listen_call_state);

  下面是个简单的测试例子,只是把呼叫状态追加到textview之上。

  package com.j2medev;

  import android.app.activity;

  import android.content.context;

  import android.os.bundle;

import android.telephony.phonestatelistener;

  import android.telephony.telephonymanager;

  import android.util.log;

  import android.widget.textview;

  public class telephony extends activity {

  private static final string tag = “telephony“;

  textview view = null;

  @override

  protected void on*(bundle savedinstancestate) {

  super.on*(savedinstancestate);

  telephonymanager mtelephonymgr = (telephonymanager) this

  .getsystemservice(context.telephony_service);

  mtelephonymgr.listen(new telelistener(),

  phonestatelistener.listen_call_state);

  view = new textview(this);

  view.settext(“listen the state of phone “);

  setcontentview(view);

  }

  class telelistener extends phonestatelistene

r {

  @override

  public void oncallstatechanged(int state,

  string incomingnumber) {

  super.oncallstatechanged(state, incomingnumber);

  switch (state) {

  case telephonymanager.call_state_idle: {

  log.e(tag, “call_state_idle“);

  view.append(“call_state_idle “ + “ “);

  break;

  }

  case telephonymanager.call_state_offhook: {

  log.e(tag, “call_state_offhook“);

  view.append(“call_state_offhook“ + “ “);

  break;

  }

  case telephonymanager.call_state_ringing: {

  log.e(tag, “call_state_ringing“);

  view.append(“call_state_ringing“ + “ “);

  break;

  }

  default:

  break;

  }

  }

  }

  }

  不要忘记在androidmanifest.xml里面添加个permission.

  < uses-permission android:name=

  “android.permission.read_phone_state“/>

  以上即android监听通话的具体操作方法

登录回复
71047
Lv1韶华一笑间等级图标
帖子
5
回复
3,370
积分
738
注册
2011-09-01
1 楼

钓鱼岛是中国的,苍井空才是全世界的!

36827
Lv6胸怀六国志等级图标等级图标等级图标等级图标等级图标等级图标等级图标
勋章勋章勋章勋章勋章勋章勋章勋章+1
帖子
2
回复
2,860
积分
9.6万
注册
2011-05-04
2 楼

<br/>道,可道,非常道;名,可名,非常名!

2622
Lv7可吟七步诗等级图标等级图标等级图标等级图标
勋章
帖子
1
回复
1,629
积分
8,036
注册
2010-11-29
3 楼

道,可道,非常道;名,可名,非常名!

106008
Lv6胸怀六国志等级图标等级图标等级图标
勋章勋章勋章勋章勋章勋章勋章
帖子
27
回复
6,810
积分
40.7万
注册
2012-05-02
4 楼

<br/>钓鱼岛是中国的,苍井空才是全世界的!

39840
Lv4莫问四书意等级图标等级图标
帖子
2
回复
1,056
积分
3,367
注册
2011-05-12
5 楼

[backcolor=#FF0000]亲,加入创世纪,一起创奇迹!加入后戴好家帽,即可获得3999币币哦,只求一辈子的兄弟姐妹,,加入创世纪吧!

登录后可以回复这个帖子。旧账号可使用原密码登录。

登录 注册新号
← 返回版块