0 在Android中对移动数据操作的几个类和接口如下:
1 TelephonyManager 类 主要提供了一系列用于访问与手机通讯相关的状态和信息的get方法。其中包括手机SIM的状态和信息、电信网络的状态及手机用户的信息,在应用程序中可以使用这些get方法获取相关数据
TelephonyManager类的对象可以通过Context.getSystemService(Context.TELEPHONY_SERVICE)方法来获得,需要注意的是有些通讯信息的获取对应用程序的权限有一定的限制,在开发的时候需要为其添加相应的权限。
2 PhoneStateListener类方法: (移动数据强度和类型 在打电话、SIM卡插拔、连接状态等状态改变而受影响,因此需要在状态下分别检测数据强度和类型 监听回调)
1.onDataActivity(intdirection) :activity 数据状态改变时监听回调
2.onServiceStateChanged(ServiceState serviceState) {//设备服务状态改变监听回调
3.onSignalStrengthsChanged(SignalStrength signalStrength) {//信号强度改变监听回调
4.onDataConnectionStateChanged(intstate) {//数据连接状态
5.onCallStateChanged(intstate, String incomingNumber) {//电话状态改变
当信号强度发生变化时,打印log如下
1 SystemUI对于信号强度的客制化
MobileSignalController 对于信号强度的监听:
class MobilePhoneStateListener extends PhoneStateListener {
public MobilePhoneStateListener(int subId, Looper looper) {
super(subId, looper);
}
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
if (DEBUG) {
Log.d(mTag, "onSignalStrengthsChanged signalStrength=" + signalStrength +
((signalStrength == null) ? "" : (" level=" + signalStrength.getLevel())));
}
mSignalStrength = signalStrength;
updateTelephony();
}
.....................................
}
/**
* Updates the current state based on mServiceState, mSignalStrength, mDataNetType,
* mDataState, and mSimState. It should be called any time one of these is updated.
* This will call listeners if necessary.
*/
private final void updateTelephony() {
if (DEBUG && FeatureOptions.LOG_ENABLE) {
Log.d(mTag, "updateTelephonySignalStrength: hasService=" + hasService()
+ " ss=" + mSignalStrength);
}
mCurrentState.connected = hasService() && mSignalStrength != null;
handleIWLANNetwork();
if (mCurrentState.connected) { //如果有SIM卡信号
获取信号强度
if (!mSignalStrength.isGsm() && mConfig.alwaysShowCdmaRssi) {
mCurrentState.level = mSignalStrength.getCdmaLevel();
} else {
mCurrentState.level = mSignalStrength.getLevel();
}
/// M: Customize the signal strength level. @ {
mCurrentState.level = mStatusBarExt.getCustomizeSignalStrengthLevel(
mCurrentState.level, mSignalStrength, mServiceState);
/// @ }
}
if (mNetworkToIconLookup.indexOfKey(mDataNetType)