判断是否可以打电话(有无SIM卡、是否飞行模式、信号是否良好)
2016-03-07 17:28
453 查看
如题判断是否可以播出电话
1.判断是否有SIM卡
2.判断是否开启飞行模式
3.判断信号是否良好
首先要有TelephonyManager
TelephonyManager telephoneManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
因为获得信号强度使用监听实现的,所以需要handler
在handler中去判断 SIM卡状态和是否开启飞行模式
具体代码:
判断是否有SIM卡:
telephoneManager.getSimState() != TelephonyManager.SIM_STATE_READY一共有5中状态:
判断是否开启飞行模式:
private boolean IsAirModeOn(Context context) {
return (Settings.System.getInt(context.getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, 0) == 1 ? true : false);
}
判断信号强度
先要监听信号的变化:
一定要记得停止监听,不然一直会发消息。
这样就可以在handler中继续去判断是否有SIM卡和是否开启飞行模式
对了记得加权限。。监听信号强度变化需要权限
<uses-permission android:name="android.permission.CHANGE_NEWWORK_STATE"/>
我再网上找了判断是否有信号的例子,只有去监听信号强度的。。
看了[b]TelephonyManager中的一些常量和方法也没有直接可以判断是否有信号的方法[/b]
[b]最后就选了用监听来实现[/b]
[b]如果大家有什么好方法希望不吝赐教
[/b]
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]
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories