`

Android如何判断手机是否处于正在通话中,通话状态的判断

阅读更多
1. 如何判断手机是否处于正在通话中?(任何时候都可以判断手机是否处于通过中)
private boolean phoneIsInUse() {
     boolean phoneInUse = false;
     try {
     ITelephony phone = ITelephony.Stub.asInterface(ServiceManager.checkService("phone"));
     if (phone != null) phoneInUse = !phone.isIdle();
     } catch (RemoteException e) {
     Log.w(TAG, "phone.isIdle() failed", e);
     }
     return phoneInUse;
    }

2.通话状态的判断(需要注册监听以后,才可以判断手机通话状态的改变,可能连续接收到同一个状态的改变)

package cn.com.chenzheng_java;

import android.app.Activity;
import android.os.Bundle;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.widget.TextView;
/**
*
* @author
* @description 通过该实例,我们可以看到,如果我们想要监听电话的拨打状况,需要这么几步
* 第一:获取电话服务管理器TelephonyManager manager = this.getSystemService(TELEPHONY_SERVICE);
* 第二:通过TelephonyManager注册我们要监听的电话状态改变事件。manager.listen(new MyPhoneStateListener(),
*          PhoneStateListener.LISTEN_CALL_STATE);这里的PhoneStateListener.LISTEN_CALL_STATE就是我们想要
*         监听的状态改变事件,初次之外,还有很多其他事件哦。
* 第三步:通过extends PhoneStateListener来定制自己的规则。将其对象传递给第二步作为参数
* 第四步:这一步很重要,那就是给应用添加权限。android.permission.READ_PHONE_STATE
*
*
*/
public class PhoneCallStateActivity extends Activity {
    TelephonyManager manager ;
    String result = "监听电话状态:/n";
     TextView textView ;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //获取电话服务
        manager = (TelephonyManager) this.getSystemService(TELEPHONY_SERVICE);
        // 手动注册对PhoneStateListener中的listen_call_state状态进行监听
        manager.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE);
       
        textView = (TextView) findViewById(R.id.textView1);
        textView.setText(result);
    }
   /***
    * 继承PhoneStateListener类,我们可以重新其内部的各种监听方法
    *然后通过手机状态改变时,系统自动触发这些方法来实现我们想要的功能
    */
    class MyPhoneStateListener extends PhoneStateListener{

        @Override
        public void onCallStateChanged(int state, String incomingNumber) {
            switch (state) {
            case TelephonyManager.CALL_STATE_IDLE:
                result+=" 手机空闲起来了 ";
                break;
            case TelephonyManager.CALL_STATE_RINGING:
                result+=" 手机铃声响了,来电号码:"+incomingNumber;
                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                result+=" 电话被挂起了 ";
            default:
                break;
            }
            textView.setText(result);
            super.onCallStateChanged(state, incomingNumber);
        }
       
    }
   
   
}
这里一定要注意,别忘记给应用注册权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
分享到:
评论

相关推荐

    Android实现监听电话呼叫状态的方法

    首先,为了能够访问手机的通话状态,必须在应用程序的清单文件`AndroidManifest.xml`中添加相应的权限。这是通过添加以下代码行实现的: ```xml &lt;uses-permission android:name="android.permission.READ_PHONE_...

    Android 判断手机的通话状态并自动发短信给对方.rar

    Android 判断手机通话的几种状态,比如正在通话状态、等待用户接听状态、手机处于待机状态、电话已接通、有来电并显示电话号码。程序还支持未接电话自动发短信功能,当判断出“我现在不方便接电话,稍后打给你”时,...

    Android-语音通话时息屏的实现

    在`onCallStateChanged(int state, String incomingNumber)`方法中,可以判断当前是否处于通话状态,以便在通话开始时启动息屏逻辑,在通话结束时恢复屏幕。 6. **权限管理**:为了访问传感器和控制屏幕,还需要在...

    android java 自定义音量键seekbar控制系统的媒体音量和通话音量,可自动实现切换

    7. **事件处理逻辑**:在实现自动切换音量控制时,需要在BroadcastReceiver中判断当前是否处于通话状态,如果是,则将SeekBar关联到通话音量;否则,关联到媒体音量。同时,PhoneStateListener也需要更新SeekBar的...

    Android来电时停止音乐播放的流程学习

    4. **CallNotifier 层面**:`CallNotifier` 收到消息后会判断是否需要查询来电详情(如号码归属地等)。如果不需要查询,则直接设置声音模式(停止音乐播放并开始播放铃声),并显示来电界面等待用户操作;如果需要...

    判断手机的网络

    学习判断手机的网络制式,不仅有助于开发者优化应用在网络条件不佳时的行为,还能帮助他们设计出更智能、用户体验更好的应用。例如,当检测到用户处于2G网络时,应用可以自动降低图片质量以加快加载速度。因此,对...

    实用源码——Android屏幕锁源码_Android.rar

    4. **权限管理**:Android系统权限控制,如READ_PHONE_STATE用于判断设备是否处于通话状态,防止在通话中自动锁定屏幕。 5. **加密算法**:如果使用密码或PIN作为解锁方式,源码可能包含了对用户输入的加密处理,以...

    Android 实现手机接通电话后振动提示的功能

    通过分析Radio模块的日志,我们可以找到一些关于通话状态变化的关键信息。例如,拨打电话的过程中,会依次出现以下状态: 1. `GET_CURRENT_CALLS id=1,DIALING`:拨号中。 2. `GET_CURRENT_CALLS id=1,ALERTING`:...

    android permission(权限)

    - 此权限一般只会在极特殊的情况下使用,例如当设备处于严重故障状态时,可通过该权限强制停机以避免进一步损坏。 - 安全人员可能会在极端情况下使用它来紧急处理设备安全问题。 #### 14. `BROADCAST_PACKAGE_...

    Android基于腾讯云实时音视频仿微信视频通话最小化悬浮

    在Android中,Activity可以通过调用`moveTaskToBack(true)`方法将其移到后台,使其处于最小化状态。但是,要使此操作生效,需要在AndroidManifest.xml中设置Activity的启动模式为`singleInstance`。这样,当用户点击...

    android权限大全

    这对于判断设备是否处于联网状态至关重要。 #### 七、访问SurfaceFlinger **权限名称:** `android.permission.ACCESS_SURFACE_FLINGER` **描述:** SurfaceFlinger是Android平台上底层的图形显示支持。此权限通常...

    QQ是否在线如何辨别?.docx

    总结来说,无论是电脑版还是手机版QQ,判断用户在线状态的核心方法是通过发起通话邀请并观察响应。手机版的新功能——语音通话,提供了更直观的方式来辨别在线与不在线。如果语音通话提示无人接听,说明对方不在线;...

    安卓 识别来电是否为被转移来电

    "Forwarded Call Alert"的工作原理可能包括监听系统级的通话状态变化,分析通话建立过程中与网络交换机交互的信令信息,来判断电话是否经过了转移。此外,应用可能还会根据不同的运营商和服务提供商进行优化,以适应...

    android常见的面试题

    在Android中是如何实现判断区分通话记录中的电话状态,去电,来电、未接来电? 通常可以通过监听BroadcastReceiver中的电话状态变化来实现。 #### 46. DVM的进程和Linux的进程,应用程序的进程是否为同一个概念 -...

    luyin_java_

    通过实现这个接口并重写`onCallStateChanged()`方法,开发者可以获知电话的状态,如通话开始、结束或处于待机状态。 3. **AudioRecord**:这是Android SDK中的类,用于从麦克风捕获音频数据。在通话监听中,我们...

    A new way to hack android app password public.pptx

    - 示例代码中展示了一个简单的实现方法,通过`ActivityManager`获取当前运行的进程列表,并判断目标应用是否处于前台,然后启动恶意Activity。 #### 2. 优缺点分析 - **优点**:无需修改目标应用,实施相对简单;...

    锁屏.zip

    锁屏与系统安全紧密相关,因此涉及到多个权限,如`android.permission.CONTROL_KEYGUARD`用于控制锁屏的显示和隐藏,`android.permission.READ_PHONE_STATE`用于判断设备是否处于通话状态,以避免在通话中意外触发...

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--服务之判断是否处于运行状态 |--服务之定义录音机 |--服务之应用内绑定服务调用方法 |--服务之电话录音 |--服务之看门狗代码示例 |--格式化之DecimalFormat数字格式化 |--桌面快捷方式的添加代码示例 |--桌面控件...

    Text 自动接听电话

    - **监听电话状态**:使用TelephonyManager的listen()方法注册电话状态监听器,当接收到PHONE_STATE变化时,可以判断是否为来电状态。 - **启动Activity并传递参数**:当检测到来电时,通过CommonHelper的...

    g2g3功能添加

    在IT行业中,"g2g3功能添加"的标题暗示我们正在讨论的是关于G2和G3技术在某个应用程序或系统中的新功能实现。G2和G3通常指的是第二代(2G)和第三代(3G)移动通信技术,它们是手机网络发展的关键阶段。 2G移动通信...

Global site tag (gtag.js) - Google Analytics