android 3G信号强度

时间:2012-10-01 13:25:07

标签: android

为什么我们必须设置一个监听器才能在3g模式下获得单个当前单元的信号强度?

我们使用NeghbouringcellInfo类得到了相邻细胞的信号强度?

为什么我们不能像这样获得当前细胞的信号强度?

4 个答案:

答案 0 :(得分:7)

尝试以下代码:

    ConnectivityManager manager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    boolean is3g = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting();


    if (is3g) {
        myListener = new MyPhoneStateListener();
        TelephonyManager telManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
        telManager.listen(myListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
    }

    private class MyPhoneStateListener extends PhoneStateListener {
        public int singalStenths = 0; 
        @Override
        public void onSignalStrengthsChanged(SignalStrength signalStrength){
            super.onSignalStrengthsChanged(signalStrength);
            int singalStrength  = signalStrength.getGsmSignalStrength();
            singalStenths = signalStrength.getGsmSignalStrength();
            System.out.println("----- gsm strength" + singalStrength );
            System.out.println("----- gsm strength" + singalStenths );

            if (singalStenths > 30) {
                signalstrength.setText("Signal Str : Good");
                signalstrength.setTextColor(getResources().getColor(R.color.good));
            }
            else if(singalStenths > 20 && singalStenths < 30) {
                signalstrength.setText("Signal Str : Average");
                 signalstrength.setTextColor(getResources().getColor(R.color.average));
            }
            else if(singalStenths < 20) {
                signalstrength.setText("Signal Str : Weak");
                 signalstrength.setTextColor(getResources().getColor(R.color.weak));
            }
        }
    };

答案 1 :(得分:3)

实现是这样的,我们必须实现监听器来获取当前单元的信号强度,我已经编写了监听器并在第一次读取时停止了监听器,然后保持在变量中。没有任何其他方式

答案 2 :(得分:3)

我尝试使用“Hazmat”代码,但遗憾的是我的设备无法运行(Samsung S3 mini Android 4.1.2)。似乎三星的一些手机在使用此功能方面存在问题,三星的任何人都不关心。 Also other Samsung models have similar problem

Samsung Galaxy SI - &gt;没问题

Samsung Galaxy SII - &gt;没有力量也没有刷新

Samsung Galaxy Tab 10.1 - &gt;没有力量也没有刷新

三星Galaxy Note - &gt;没有力量也没有刷新

(Android版本:2.3.3,2.3.4,2.3.5,3.1)

还报告了herehere

结论: 请注意,很多三星设备无法正常使用此功能! 我不知道有任何解决方法。三星让我们的应用程序不可靠。

答案 3 :(得分:0)

如果我理解得很好,你不想设置一个听众,只要你需要它就能获得信号强度。如果是这样的话就是如何做到这一点:

android.telephony.SignalStrength

您将获得3G或CDMA或您连接的任何类型的小区。

希望它有所帮助。

--------评论后编辑--------------

听众只是一个很好的方式,可以告知您感兴趣的内容发生了变化,而无需经常轮询。效率更高。

以下是我从Android源代码中获取的示例。

public void onSignalStrengthsChanged(SignalStrength signalStrength) {
        if (mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA) {
            String updateMsg = "cdma dBM=" + signalStrength.getCdmaDbm();
            mTrackerData.writeEntry(SIGNAL_PROVIDER_TAG, updateMsg);
        } else if  (mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM) {
            String updateMsg = "gsm signal=" + signalStrength.getGsmSignalStrength();
            mTrackerData.writeEntry(SIGNAL_PROVIDER_TAG, updateMsg);
        }
    }

这取自frameworks/base/tests/LocationTracker/src/com/android/locationtracker/TrackerService.java。 是的,此方法由侦听器调用,但它不必。这是一种比不断轮询更有效的做事方式。另一方面,如果您只想在特定时间获得信号强度,只需一次,没有什么可以阻止您从其他地方调用它。

另外,我建议您下载Android发行版。使用“grep”,它提供了很多关于如何使用类,方法等的示例。我从中学到了很多东西。这些例子很好,因为它们是由编写操作系统的人编写的。 此外,您可以获取源代码 Android source code