未连接蜂窝网络时,Android 仍会检测蜂窝信号强度

Posted

技术标签:

【中文标题】未连接蜂窝网络时,Android 仍会检测蜂窝信号强度【英文标题】:Android still detects cellular signal strength while no cellular network connected 【发布时间】:2015-11-26 06:34:12 【问题描述】:

我编写了一个小 android 程序来检测蜂窝信号强度。我在手机中插入了一张过期的 SIM 卡,它在状态栏中显示零信号。但是,以下代码返回 Signal strength equals to 22

public class WelcomeActivity extends AppCompatActivity 
    TelephonyManager telephonyManager;
    CustomPhoneStateListener customPhoneStateListener;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_welcome);

        customPhoneStateListener = new CustomPhoneStateListener();
        telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
        telephonyManager.listen(customPhoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
    

    @Override
    protected void onPause() 
        super.onPause();
        telephonyManager.listen(customPhoneStateListener, PhoneStateListener.LISTEN_NONE);
    

    @Override
    protected void onResume() 
        super.onResume();
        telephonyManager.listen(customPhoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
    


    /* Phone State Listener */
    private class CustomPhoneStateListener extends PhoneStateListener 
        @Override
        public void onSignalStrengthsChanged(SignalStrength signalStrength) 
            super.onSignalStrengthsChanged(signalStrength);

            int strength = signalStrength.getGsmSignalStrength();
            Toast.makeText(getApplicationContext(), "Signal Strength: " + String.valueOf(strength), Toast.LENGTH_SHORT).show();
        
    

值 22 从何而来?如何检测蜂窝网络是否已连接?这个值真的靠谱吗?

从 Android documentation 开始,getGsmSignalStrength() 返回值 0 到 31 和 99。

【问题讨论】:

你试过检查它在飞行模式下返回的值吗? 在飞行模式下,信号强度为0 要么您安装了一些第三方信号优化器软件,否则它工作正常。只是我已经实现了相同的,并且对我有用,请在下面的答案中检查代码 【参考方案1】:

我刚刚实现了n个运行代码:

package com.example.sanketprabhu.gsmsignalstrength;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.telephony.PhoneStateListener;
import android.telephony.SignalStrength;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity
    
        TelephonyManager Tel;
        MyPhoneStateListener MyListener;

        @Override
        public void onCreate(Bundle savedInstanceState)
        
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            MyListener   = new MyPhoneStateListener();
            Tel       = ( TelephonyManager )getSystemService(Context.TELEPHONY_SERVICE);
            Tel.listen(MyListener ,PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
        

         @Override
        protected void onPause()
        
            super.onPause();
            Tel.listen(MyListener, PhoneStateListener.LISTEN_NONE);
        

          @Override
        protected void onResume()
        
            super.onResume();
            Tel.listen(MyListener,PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
        

        public  class MyPhoneStateListener extends PhoneStateListener
        
            /* Get the Signal strength from the provider, each tiome there is an update */
            @Override
            public void onSignalStrengthsChanged(SignalStrength signalStrength)
            
                super.onSignalStrengthsChanged(signalStrength);
                Toast.makeText(getApplicationContext(), "Go to Firstdroid!!! GSM Cinr = " 
                        + String.valueOf(signalStrength.getGsmSignalStrength()), Toast.LENGTH_SHORT).show();
            

        

    

它对我有用。

这里我附上了一些屏幕截图。

你是对的:0-31 和 99 的投注值

不幸的是,我在办公室信号强度低,但工作正常

【讨论】:

但是重点是,我的SIM卡没有连接GSM网络,但信号还是有的;我希望读数为 0。我怀疑函数返回值的准确性。 SIM卡过期或无效时手机信号不为空,但状态栏会显示零信号,因为状态栏只显示SIM CARD VALID+ SIGNAL EXIST时的信号,同时满足这两个条件。跨度>

以上是关于未连接蜂窝网络时,Android 仍会检测蜂窝信号强度的主要内容,如果未能解决你的问题,请参考以下文章

Android:获取附近的所有蜂窝运营商及其信号强度

什么时候使用蜂窝塔三角测量?

网络笔记:蜂窝网络

设备在Android中连接到WiFi时如何获取蜂窝网络的IP地址

什么是蜂窝网络和蜂窝设备测试

CLLocationManager 在蜂窝网络 (3G) 中未获得位置准确性