<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>中文 &#187; wangxinasy</title>
	<atom:link href="http://software.intel.com/zh-cn/blogs/author/wangxinasy/feed/" rel="self" type="application/rss+xml" />
	<link>http://software.intel.com/zh-cn/blogs</link>
	<description></description>
	<lastBuildDate>Sat, 26 May 2012 06:34:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>android 获取手机GSM/CDMA信号信息</title>
		<link>http://software.intel.com/zh-cn/blogs/2011/12/16/android-gsmcdma/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2011/12/16/android-gsmcdma/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 03:55:45 +0000</pubDate>
		<dc:creator>wangxinasy</dc:creator>
				<category><![CDATA[Android 开发]]></category>
		<category><![CDATA[全国博客大奖赛]]></category>
		<category><![CDATA[全国大学生软件创新大赛专栏]]></category>
		<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[高校博客大奖赛]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[CDMA]]></category>
		<category><![CDATA[GMS]]></category>
		<category><![CDATA[信号]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2011/12/16/android-gsmcdma/</guid>
		<description><![CDATA[在Android中我们常用的轻松获取WIFI信号列表，那如何获取CDMA或者GSM的手机信号呢？ 系统提供了TelephonyManager类，此类非常丰富，基本你所需要的手机信息都能获取到，那下面就来看看我们所需要的CDMA与GSM信号是如何获取的吧。 private TelephonyManager telephonyManager; private PhoneStateListener phoneStateListener; 首先声明两个变量 在onCreate()方法中初始化变量 InitPhoneStateListener(); telephonyManager = (TelephonyManager) this.ctx.getSystemService(Context.TELEPHONY_SERVICE); telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); telephonyManager.listen(phoneStateListener,PhoneStateListener.LISTEN_CELL_LOCATION); if(telephonyManager.getCellLocation()!=null){ //获取当前基站信息 phoneStateListener.onCellLocationChanged(telephonyManager.getCellLocation()); } /** 初始化PhoneStateListener */ private void InitPhoneStateListener() { phoneStateListener = new PhoneStateListener() { @Override public void onCellLocationChanged(CellLocation location) { // TODO Auto-generated method stub if (location instanceof GsmCellLocation) {// gsm网络 phoneType = 1; GsmCell [...]]]></description>
			<content:encoded><![CDATA[<p>    在Android中我们常用的轻松获取WIFI信号列表，那如何获取CDMA或者GSM的手机信号呢？<br />
系统提供了TelephonyManager类，此类非常丰富，基本你所需要的手机信息都能获取到，那下面就来看看我们所需要的CDMA与GSM信号是如何获取的吧。</p>
<p>	private TelephonyManager telephonyManager;<br />
	private PhoneStateListener phoneStateListener;<br />
首先声明两个变量</p>
<p>在onCreate()方法中初始化变量<br />
InitPhoneStateListener();<br />
telephonyManager = (TelephonyManager) this.ctx.getSystemService(Context.TELEPHONY_SERVICE);<br />
		telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);<br />
		telephonyManager.listen(phoneStateListener,PhoneStateListener.LISTEN_CELL_LOCATION);<br />
		if(telephonyManager.getCellLocation()!=null){<br />
			//获取当前基站信息<br />
			phoneStateListener.onCellLocationChanged(telephonyManager.getCellLocation());<br />
		}</p>
<p>/** 初始化PhoneStateListener */<br />
	private void InitPhoneStateListener() {<br />
		phoneStateListener = new PhoneStateListener() {<br />
			@Override<br />
			public void onCellLocationChanged(CellLocation location) {<br />
				// TODO Auto-generated method stub<br />
				if (location instanceof GsmCellLocation) {// gsm网络<br />
					phoneType = 1;<br />
					GsmCell gsmCell = new GsmCell();<br />
					gsmCell.lac = ((GsmCellLocation) location).getLac();<br />
					gsmCell.cid = ((GsmCellLocation) location).getCid();<br />
					/** 获取mcc，mnc */<br />
					String mccMnc=telephonyManager.getNetworkOperator();<br />
					if(mccMnc!=null&amp;&amp;mccMnc.length()&gt;=5){<br />
						gsmCell.mcc = mccMnc.substring(0, 3);<br />
						gsmCell.mnc = mccMnc.substring(3, 5);<br />
					}<br />
					gsmCell.signal=lastSignal;<br />
					gsmCell.time = System.currentTimeMillis();<br />
					if (gsmCell.lac != -1 &amp;&amp; gsmCell.cid != -1) {<br />
						gsmCells.add(0, gsmCell);<br />
//						Collections.sort(gsmCells);<br />
//						/**最多保存近3个基站信息*/<br />
//						if (gsmCells.size() &gt;3)<br />
//							gsmCells.remove(3);<br />
					}<br />
//获取相邻基站信息<br />
					List neighboringList=telephonyManager.getNeighboringCellInfo();<br />
					for(NeighboringCellInfo ni:neighboringList){<br />
						GsmCell gb = new GsmCell();<br />
						gb.mnc=mccMnc.substring(3, 5);<br />
						gb.lac=ni.getLac();<br />
						gb.cid=ni.getCid();<br />
						gb.signal=-133+2*ni.getRssi();<br />
						gb.time=System.currentTimeMillis();<br />
						gsmCells.add(gb);<br />
					}<br />
				} else {// 其他CDMA等网络<br />
					try {<br />
						Class cdmaClass = Class.forName("android.telephony.cdma.CdmaCellLocation");<br />
						phoneType = 2;<br />
						CdmaCellLocation cdma = (CdmaCellLocation) location;<br />
						CdmaCell cdmaCell = new CdmaCell();<br />
						cdmaCell.stationId = cdma.getBaseStationId() &gt;= 0 ?<br />
								cdma.getBaseStationId(): cdmaCell.stationId;<br />
						cdmaCell.networkId = cdma.getNetworkId() &gt;= 0 ? cdma<br />
								.getNetworkId() : cdmaCell.networkId;<br />
						cdmaCell.systemId = cdma.getSystemId() &gt;= 0 ? cdma<br />
								.getSystemId() : cdmaCell.systemId;<br />
						/** 获取mcc，mnc */<br />
						String mccMnc=telephonyManager.getNetworkOperator();<br />
						if(mccMnc!=null&amp;&amp;mccMnc.length()&gt;=5){<br />
							cdmaCell.mcc = mccMnc.substring(0, 3);<br />
							cdmaCell.mnc = mccMnc.substring(3, 5);<br />
						}<br />
						cdmaCell.signal=lastSignal;<br />
						cdmaCell.time = System.currentTimeMillis();<br />
						int lat = cdma.getBaseStationLatitude();<br />
						int lon = cdma.getBaseStationLongitude();<br />
						if (lat &lt;Integer.MAX_VALUE&amp;&amp; lon &lt;Integer.MAX_VALUE) {<br />
							cdmaCell.lat = lat;<br />
							cdmaCell.lon = lon;<br />
						}<br />
						if (cdmaCell.stationId != -1&amp;&amp; cdmaCell.networkId != -1&amp;&amp; cdmaCell.systemId != -1) {<br />
							cdmaCells.add(0, cdmaCell);<br />
						}<br />
						List neighboringList=telephonyManager.getNeighboringCellInfo();<br />
						for(NeighboringCellInfo ni:neighboringList){<br />
							CdmaCell cdmaBean = new CdmaCell();<br />
							cdmaBean.systemId=cdmaCell.systemId;<br />
							cdmaBean.lac=ni.getLac();<br />
							cdmaBean.cellid=ni.getCid();<br />
							cdmaBean.signal=-113+2*ni.getRssi();<br />
							cdmaCells.add(cdmaBean);<br />
						}<br />
												} catch (ClassNotFoundException classnotfoundexception) {<br />
					}<br />
				}// end CDMA网络<br />
				super.onCellLocationChanged(location);<br />
			}// end onCellLocationChanged</p>
<p>			@Override<br />
			public void onServiceStateChanged(ServiceState serviceState) {<br />
				// TODO Auto-generated method stub<br />
				super.onServiceStateChanged(serviceState);<br />
			}<br />
			@Override<br />
			public void onSignalStrengthsChanged(SignalStrength signalStrength) {<br />
				// TODO Auto-generated method stub<br />
				int asu=signalStrength.getGsmSignalStrength();<br />
				lastSignal=-113+2*asu; //信号强度<br />
				super.onSignalStrengthsChanged(signalStrength);<br />
			}<br />
		};<br />
	}// end InitPhoneStateListener<br />
其实很简单，只要写好了监听类，一切信号都可以获取得到。<br />
这样，我们很轻松的就获取到了手机信号及周围基站的信号强度了，当然，需要的读取手机状态等的权限就在这里不说了。</p>
<p>作者：sojex<br />
Email:w.sojex@gmail.com</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2011/12/16/android-gsmcdma/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

