您的位置:首页 > 移动开发 > Android开发

判断是否可以打电话(有无SIM卡、是否飞行模式、信号是否良好)

2016-03-07 17:28 453 查看
如题判断是否可以播出电话

1.判断是否有SIM卡

2.判断是否开启飞行模式

3.判断信号是否良好

首先要有TelephonyManager

TelephonyManager telephoneManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

因为获得信号强度使用监听实现的,所以需要handler

在handler中去判断 SIM卡状态和是否开启飞行模式

具体代码:
private Handler handlerForSignalState = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case SIGNAL_STATE_GOOD:

if (telephoneManager.getSimState() != TelephonyManager.SIM_STATE_READY
|| IsAirModeOn(context)) {
//无SIM卡 或 开启了飞行模式
} else {

}

break;
case SIGNAL_STATE_NONE_OR_UNKNOWN:
// 信号差
break;

default:
break;
}
};
};


判断是否有SIM卡:

telephoneManager.getSimState() != TelephonyManager.SIM_STATE_READY一共有5中状态:
public static final int SIM_STATE_UNKNOWN = 0;
/** SIM card state: no SIM card is available in the device */
public static final int SIM_STATE_ABSENT = 1;
/** SIM card state: Locked: requires the user's SIM PIN to unlock */
public static final int SIM_STATE_PIN_REQUIRED = 2;
/** SIM card state: Locked: requires the user's SIM PUK to unlock */
public static final int SIM_STATE_PUK_REQUIRED = 3;
/** SIM card state: Locked: requries a network PIN to unlock */
public static final int SIM_STATE_NETWORK_LOCKED = 4;
/** SIM card state: Ready */
public static final int SIM_STATE_READY = 5;

判断是否开启飞行模式:

private boolean IsAirModeOn(Context context) {
return (Settings.System.getInt(context.getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, 0) == 1 ? true : false);
}

判断信号强度

先要监听信号的变化:

telephoneManager.listen(phoneStateListener,PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);


private PhoneStateListener phoneStateListener = new PhoneStateListener() {

        @Override
        public void onSignalStrengthsChanged(SignalStrength signalStrength) {
            super.onSignalStrengthsChanged(signalStrength);
            if (signalStrength.getCdmaDbm() >= -100) {
                telephoneManager.listen(phoneStateListener,
                        PhoneStateListener.LISTEN_NONE);//停止监听
                handlerForSignalState.sendEmptyMessage(SIGNAL_STATE_GOOD);
            } else {
                telephoneManager.listen(phoneStateListener,
                        PhoneStateListener.LISTEN_NONE);//停止监听                
handlerForSignalState
                .sendEmptyMessage(SIGNAL_STATE_NONE_OR_UNKNOWN);
            }
        };

};


一定要记得停止监听,不然一直会发消息。

telephoneManager.listen(phoneStateListener,PhoneStateListener.LISTEN_NONE);


这样就可以在handler中继续去判断是否有SIM卡和是否开启飞行模式

对了记得加权限。。监听信号强度变化需要权限

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

我再网上找了判断是否有信号的例子,只有去监听信号强度的。。

看了[b]TelephonyManager中的一些常量和方法也没有直接可以判断是否有信号的方法[/b]

[b]最后就选了用监听来实现[/b]

[b]如果大家有什么好方法希望不吝赐教


[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android