Android 信号强度的获取

 如何获得信号的质量受到我们的电话。这篇教程我们将教你如何接收信号强度你随时提供从你的载体。让我们开始以教程:我们将继续学习如何添加一个监听器到电话类,以及如何获得CINR信号质量)(从这听众。我们需要添加权限允许添加接下来的活动:android.permission.CHANGE_NETWORK_STATE“AndroidManifest.xml”文件应该看起来如下:

java代码:
  1. < ?xml version="1.0" encoding="utf-8"?>

  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"

  3. package="eoe.demo"
  4. android:versionCode="1"
  5. android:versionName="1.0">

  6. <application
  7. android:icon="@drawable/icon"
  8. android:label="@string/app_name">

  9. <activity
  10. android:name=".GetGsmSignalStrength"
  11. android:label="@string/app_name">

  12. <intent -filter>
  13. <action android:name="android.intent.action.MAIN" />
  14. <category android:name="android.intent.category.LAUNCHER" />
  15. </intent>
  16. </activity>

  17. </application>

  18. <uses -sdk android:minSdkVersion="4" />
  19. <uses -permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses>
  20. </manifest>
复制代码

       现在让我们开始你的代码。所有的解释就是已建在代码,请阅读这些言论。我们需要增加进口

java代码:
  1. import android.app.Activity;
  2. import android.content.Context;
  3. import android.os.Bundle;
  4. import android.telephony.PhoneStateListener;
  5. import android.telephony.SignalStrength;
  6. import android.telephony.TelephonyManager;
  7. import android.widget.Toast;
复制代码

       onResume,称为申请时重新启动后,被最小化、onPause,称为当应用程序被最小化、onCreate当应用程序,被称为是开始MyPhoneStateListener私人课,称为创造听众代码可以求实创新:

java代码:
  1. public class GetGsmSignalStrength extends Activity{
  2. /* 这个变量需要是全球性的,所以我们可以用它们onResume和onPause方法停止听众*/

  3. TelephonyManager Tel;
  4. MyPhoneStateListener MyListener;

  5. /** Called when the activity is first created. */

  6. @Override
  7. public void onCreate(Bundle savedInstanceState){
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.main);

  10. /* 更新的听众,并且启动它*/

  11. MyListener = new MyPhoneStateListener();
  12. Tel = ( TelephonyManager )getSystemService(Context.TELEPHONY_SERVICE);
  13. Tel.listen(MyListener ,PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
  14. }

  15. /* 当应用程序被称为被最小化*/
  16. @Override
  17. protected void onPause(){
  18. super.onPause();
  19. Tel.listen(MyListener, PhoneStateListener.LISTEN_NONE);
  20. }

  21. /* Called when the application resumes */
  22. @Override
  23. protected void onResume(){

  24. super.onResume();
  25. Tel.listen(MyListener,PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
  26. }

  27. private class MyPhoneStateListener extends PhoneStateListener{

  28. /*得到信号的强度由每个tiome供应商,有更新*/

  29. @Override
  30. public void onSignalStrengthsChanged(SignalStrength signalStrength){

  31. super.onSignalStrengthsChanged(signalStrength);
  32. Toast.makeText(getApplicationContext(), "Go to Firstdroid!!! GSM Cinr = "+ String.valueOf(signalStrength.getGsmSignalStrength()), Toast.LENGTH_SHORT).show();
  33. }

  34. };/* End of private Class */

  35. }/* GetGsmSignalStrength */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Android的TelephonyManager类来获取当前设备的信号强度。 首先,在AndroidManifest.xml文件中添加以下权限: ```xml <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> ``` 然后,在你的代码中,可以这样获取信号强度: ```java TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); int signalStrength = 0; if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) { if (telephonyManager != null) { List<CellInfo> cellInfoList = telephonyManager.getAllCellInfo(); if (cellInfoList != null) { for (CellInfo cellInfo : cellInfoList) { if (cellInfo instanceof CellInfoGsm) { CellSignalStrengthGsm gsmSignalStrength = ((CellInfoGsm) cellInfo).getCellSignalStrength(); signalStrength = gsmSignalStrength.getDbm(); break; } else if (cellInfo instanceof CellInfoCdma) { CellSignalStrengthCdma cdmaSignalStrength = ((CellInfoCdma) cellInfo).getCellSignalStrength(); signalStrength = cdmaSignalStrength.getDbm(); break; } else if (cellInfo instanceof CellInfoLte) { CellSignalStrengthLte lteSignalStrength = ((CellInfoLte) cellInfo).getCellSignalStrength(); signalStrength = lteSignalStrength.getDbm(); break; } else if (cellInfo instanceof CellInfoWcdma) { CellSignalStrengthWcdma wcdmaSignalStrength = ((CellInfoWcdma) cellInfo).getCellSignalStrength(); signalStrength = wcdmaSignalStrength.getDbm(); break; } } } } } ``` 上述代码中,我们首先获取了TelephonyManager实例。然后,在检查了应用是否拥有READ_PHONE_STATE权限之后,获取了所有可用的CellInfo对象。接着,在循环中,我们通过instanceof关键字判断当前CellInfo对象的类型,并获取对应的信号强度值。最后,我们返回了信号强度值。 需要注意的是,上述代码中的信号强度值是以dBm为单位的。通常情况下,信号强度值越大,表示信号越强。但是,如果信号强度值过小,可能会导致信号质量较差。在实际开发中,需要根据具体的业务需求,合理地使用信号强度值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值