android 获取手机信号,Android获取到手机信号强度信息后传回给Unity

public class phoneSignalStrenth {

private SignalStrength m_SignalStrength;

private static final int SIGNAL_STRENGTH_NONE_OR_UNKNOWN = 0;

private static final int SIGNAL_STRENGTH_POOR = 1;

private static final int SIGNAL_STRENGTH_MODERATE = 2;

private static final int SIGNAL_STRENGTH_GOOD = 3;

private static final int SIGNAL_STRENGTH_GREAT = 4;

public phoneSignalStrenth(SignalStrength signalStrength) {

m_SignalStrength = signalStrength;

/**

* Get signal level as an int from 0..4

*

* @hide

*/

public int getLevel() {

int level;

if (m_SignalStrength.isGsm()) {

//level = getLteLevel();

level = getGsmLevel();

} else {

int cdmaLevel = getCdmaLevel();

int evdoLevel = getEvdoLevel();

if (evdoLevel == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {

/* We don't know evdo, use cdma */

level = getCdmaLevel();

} else if (cdmaLevel == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {

/* We don't know cdma, use evdo */

level = getEvdoLevel();

} else {

/* We know both, use the lowest level */

level = cdmaLevel < evdoLevel ? cdmaLevel : evdoLevel;

System.out.println("tjg333::java::level:" + level);

return level;

/**

* Get gsm as level 0..4

*

*/

private int getGsmLevel() {

int level;

// ASU ranges from 0 to 31 - TS 27.007 Sec 8.5

// asu = 0 (-113dB or less) is very weak

// signal, its better to show 0 bars to the user in such cases.

// asu = 99 is a special case, where the signal strength is unknown.

int asu = m_SignalStrength.getGsmSignalStrength();

if (asu <= 2 || asu == 99) level = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;

else if (asu >= 12) level = SIGNAL_STRENGTH_GREAT;

else if (asu >= 8) level = SIGNAL_STRENGTH_GOOD;

else if (asu >= 5) level = SIGNAL_STRENGTH_MODERATE;

else level = SIGNAL_STRENGTH_POOR;

return level;

/**

* Get cdma as level 0..4

*

*/

private int getCdmaLevel() {

final int cdmaDbm = m_SignalStrength.getCdmaDbm();

final int cdmaEcio = m_SignalStrength.getCdmaEcio();

int levelDbm;

int levelEcio;

if (cdmaDbm >= -75) levelDbm = SIGNAL_STRENGTH_GREAT;

else if (cdmaDbm >= -85) levelDbm = SIGNAL_STRENGTH_GOOD;

else if (cdmaDbm >= -95) levelDbm = SIGNAL_STRENGTH_MODERATE;

else if (cdmaDbm >= -100) levelDbm = SIGNAL_STRENGTH_POOR;

else levelDbm = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;

// Ec/Io are in dB*10

if (cdmaEcio >= -90) levelEcio = SIGNAL_STRENGTH_GREAT;

else if (cdmaEcio >= -110) levelEcio = SIGNAL_STRENGTH_GOOD;

else if (cdmaEcio >= -130) levelEcio = SIGNAL_STRENGTH_MODERATE;

else if (cdmaEcio >= -150) levelEcio = SIGNAL_STRENGTH_POOR;

else levelEcio = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;

int level = (levelDbm < levelEcio) ? levelDbm : levelEcio;

return level;

/**

* Get Evdo as level 0..4

*

*/

private int getEvdoLevel() {

int evdoDbm = m_SignalStrength.getEvdoDbm();

int evdoSnr = m_SignalStrength.getEvdoSnr();

int levelEvdoDbm;

int levelEvdoSnr;

if (evdoDbm >= -65) levelEvdoDbm = SIGNAL_STRENGTH_GREAT;

else if (evdoDbm >= -75) levelEvdoDbm = SIGNAL_STRENGTH_GOOD;

else if (evdoDbm >= -90) levelEvdoDbm = SIGNAL_STRENGTH_MODERATE;

else if (evdoDbm >= -105) levelEvdoDbm = SIGNAL_STRENGTH_POOR;

else levelEvdoDbm = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;

if (evdoSnr >= 7) levelEvdoSnr = SIGNAL_STRENGTH_GREAT;

else if (evdoSnr >= 5) levelEvdoSnr = SIGNAL_STRENGTH_GOOD;

else if (evdoSnr >= 3) levelEvdoSnr = SIGNAL_STRENGTH_MODERATE;

else if (evdoSnr >= 1) levelEvdoSnr = SIGNAL_STRENGTH_POOR;

else levelEvdoSnr = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;

int level = (levelEvdoDbm < levelEvdoSnr) ? levelEvdoDbm : levelEvdoSnr;

return level;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值