Android-通话状态监测

在许多的场合需要对通话的状态进行监测,根据不同的通话状态进行不同的操作,代码如下。

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.telephony.PhoneNumberFormattingTextWatcher;
import android.telephony.PhoneNumberUtils;
import android.telephony.PhoneStateListener;
import android.telephony.ServiceState;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.EditText;

public class CheckStatusActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        String opName = telManager.getNetworkOperatorName();
        Log.i("telephony", "operator name = " + opName);

        String phoneNumber = telManager.getLine1Number();
        Log.i("telephony", "phone number = " + phoneNumber);

        String providerName = telManager.getSimOperatorName();
        Log.i("telephony", "provider name = " + providerName);

        int callStatus = telManager.getCallState();
        String callState = getCallStateString(callStatus);
        Log.i("telephony", callState);

        telManager.listen(new PhoneStateListener() {
            public void onCallStateChanged(int state, String incomingNumber) {
                String newState = getCallStateString(state);
                if (state == TelephonyManager.CALL_STATE_RINGING) {
                    Log.i("telephony", newState + " number = " + incomingNumber);
                } else {
                    Log.i("telephony", newState);
                }

            }

        }, PhoneStateListener.LISTEN_CALL_STATE);

        ServiceState serviceState = new ServiceState();
        int serviceStatus = serviceState.getState();
        String serviceStateString = getServiceStateString(serviceStatus);
        Log.i("telephony", serviceStateString);


        boolean isRoaming = serviceState.getRoaming();
        Log.i("telephony", "Roaming state is " + isRoaming);


        String formattedNumber = PhoneNumberUtils.formatNumber("9995551212");
        Log.i("telephony", formattedNumber);

        setContentView(R.layout.status);
        EditText numberEntry = (EditText) findViewById(R.id.number_entry);
        numberEntry.addTextChangedListener(new PhoneNumberFormattingTextWatcher());

    }

    private String getCallStateString(int callState)    {
        String callStateString = null;
        switch (callState) {
            case TelephonyManager.CALL_STATE_IDLE:
                callStateString = "Phone is idle.";
                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                callStateString = "Phone is in use.";
                break;
            case TelephonyManager.CALL_STATE_RINGING:
                callStateString = "Phone is ringing!";
                break;
        }

        return callStateString;
    }

    private String getServiceStateString(int serviceState) {
        String serviceStateString = null;
        switch (serviceState) {
            case ServiceState.STATE_EMERGENCY_ONLY:
                serviceStateString = "Emergency calls only";
                break;
            case ServiceState.STATE_IN_SERVICE:
                serviceStateString = "Normal service";
                break;
            case ServiceState.STATE_OUT_OF_SERVICE:
                serviceStateString = "No service available";
                break;
            case ServiceState.STATE_POWER_OFF:
                serviceStateString = "Telephony radio is off";
                break;
        }

        return serviceStateString;

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值