android应用程序中的GSM信号强度测量值始终显示为0
信号强度始终显示为0 此代码运行时没有错误,但始终显示信号强度为0。我尝试在我的模拟器和android设备上运行此代码,但它显示的信号强度为0 请给出获取我的移动网络的正确信号强度的详细说明,以及获取区域内其他网络信号强度的代码(如果可能) MainActivity.javaandroid应用程序中的GSM信号强度测量值始终显示为0,android,Android,信号强度始终显示为0 此代码运行时没有错误,但始终显示信号强度为0。我尝试在我的模拟器和android设备上运行此代码,但它显示的信号强度为0 请给出获取我的移动网络的正确信号强度的详细说明,以及获取区域内其他网络信号强度的代码(如果可能) MainActivity.java package com.example.termproject; import android.os.Bundle; import android.view.Menu; import android.view.Vi
package com.example.termproject;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.app.Activity;
import android.telephony.PhoneStateListener;
import android.telephony.SignalStrength;
import android.telephony.TelephonyManager;
import android.content.Context;
import android.widget.Toast;
public class MainActivity extends Activity
{
TelephonyManager Tel;
MyPhoneStateListener MyListener;
private int signal;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
class MyPhoneStateListener extends PhoneStateListener
{
int signal;
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength)
{
super.onSignalStrengthsChanged(signalStrength);
signal = signalStrength.getGsmSignalStrength();
}
}
public void myaction(View v)
{
MyListener = new MyPhoneStateListener();
Tel = ( TelephonyManager )getSystemService(Context.TELEPHONY_SERVICE);
Tel.listen(MyListener ,PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
Toast.makeText(getApplicationContext(), "GSM signal strength is " + String.valueOf(this.signal), Toast.LENGTH_SHORT).show();
}
}
Manifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.termproject"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<!-- PERMISSIONS -->
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- LICENSE PERMISSIONS -->
<uses-permission android:name="com.android.vending.CHECK_LICENSE" />
<!-- USES -->
<uses-feature android:name="android.hardware.telephony" android:required="false"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
tools:context=".MainActivity" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="myaction"/>
</RelativeLayout>
此线程似乎识别出您的PhoneStateListener不正确。从您的问题判断,您似乎有一个CDMA设备,因此GSM将始终返回0。不确定模拟器的预期行为是什么
package com.piusvelte.wapdroid;
导入静态com.piusvelte.wapdroid.WapdroidService.PHONE\u TYPE\u CDMA;
导入静态android.telephony.neightringcellinfo.UNKNOWN\u RSSI;
导入android.telephony.CellLocation;
导入android.telephony.PhoneStateListener;
导入android.telephony.SignalStrength;
导入android.telephony.TelephonyManager;
//api>=7的PhoneStateListener
公共类PhoneListenerAPI 7扩展PhoneStateListener{
专用WapdroidService mService;
公用电话列表NERAPI7(WapdroidService服务){
mService=服务;
}
CellLocation更改后的公共void(CellLocation位置){
//这也称为signalStrengthChanged,因为signalStrengthChanged本身不够可靠
mService.getCellInfo(位置);
}
信号强度更改时的公共无效(内部asu){
//添加cdma支持,转换来自gsm的信号
如果((mService.mTeleManager.getPhoneType()==TelephonyManager.PHONE_-TYPE_-GSM)|(mService.mTeleManager.getPhoneType()==PHONE_-TYPE_-CDMA))mService.signalStrengthChanged((asu>0)&(asu!=未知_-RSSI)-(2*asu-113):asu);
else mService.release();
}
信号强度上的公共无效已更改(信号强度信号强度){
if(mService.mTeleManager.getPhoneType()==TelephonyManager.PHONE\u TYPE\u GSM){
int asu=signalStrength.getGsmSignalStrength();
M服务信号强度变化((asu>0)和(asu!=未知?)(2*asu-113):asu);
}
如果(mService.mTeleManager.getPhoneType()==PHONE_TYPE_CDMA)mService.signalStrength已更改(signalStrength.getCdmaDbm()
package com.piusvelte.wapdroid;
import static com.piusvelte.wapdroid.WapdroidService.PHONE_TYPE_CDMA;
import static android.telephony.NeighboringCellInfo.UNKNOWN_RSSI;
import android.telephony.CellLocation;
import android.telephony.PhoneStateListener;
import android.telephony.SignalStrength;
import android.telephony.TelephonyManager;
// PhoneStateListener for api >= 7
public class PhoneListenerApi7 extends PhoneStateListener {
private WapdroidService mService;
public PhoneListenerApi7(WapdroidService service) {
mService = service;
}
public void onCellLocationChanged(CellLocation location) {
// this also calls signalStrengthChanged, since signalStrengthChanged isn't reliable enough by itself
mService.getCellInfo(location);
}
public void onSignalStrengthChanged(int asu) {
// add cdma support, convert signal from gsm
if ((mService.mTeleManager.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM) || (mService.mTeleManager.getPhoneType() == PHONE_TYPE_CDMA)) mService.signalStrengthChanged((asu > 0) && (asu != UNKNOWN_RSSI) ? (2 * asu - 113) : asu);
else mService.release();
}
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
if (mService.mTeleManager.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM) {
int asu = signalStrength.getGsmSignalStrength();
mService.signalStrengthChanged((asu > 0) && (asu != UNKNOWN_RSSI) ? (2 * asu - 113) : asu);
}
else if (mService.mTeleManager.getPhoneType() == PHONE_TYPE_CDMA) mService.signalStrengthChanged(signalStrength.getCdmaDbm() < signalStrength.getEvdoDbm() ? signalStrength.getCdmaDbm() : signalStrength.getEvdoDbm());
else mService.release();
}
}