CellInfoManager
公司主營業(yè)務(wù):成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出平武免費做網(wǎng)站回饋大家。
import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.Context;
import android.telephony.CellLocation;
import android.telephony.NeighboringCellInfo;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.telephony.gsm.GsmCellLocation;
import android.util.Log;
public class CellInfoManager {
private int asu;
private int bid;
private int cid;
private boolean isCdma;
private boolean isGsm;
private int lac;
private int lat;
private final PhoneStateListener listener;
private int lng;
private int mcc;
private int mnc;
private int nid;
private int sid;
private TelephonyManager tel;
private boolean valid;
private Context context;
public CellInfoManager(Context paramContext) {
this.listener = new CellInfoListener(this);
tel = (TelephonyManager) paramContext.getSystemService(Context.TELEPHONY_SERVICE);
this.tel.listen(this.listener, PhoneStateListener.LISTEN_CELL_LOCATION | PhoneStateListener.LISTEN_SIGNAL_STRENGTH);
context = paramContext;
}
public static int dBm(int i) {
int j;
if (i = 0 i = 31)
j = i * 2 + -113;
else
j = 0;
return j;
}
public int asu() {
return this.asu;
}
public int bid() {
if (!this.valid)
update();
return this.bid;
}
public JSONObject cdmaInfo() {
if (!isCdma()) {
return null;
}
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("bid", bid());
jsonObject.put("sid", sid());
jsonObject.put("nid", nid());
jsonObject.put("lat", lat());
jsonObject.put("lng", lng());
} catch (JSONException ex) {
jsonObject = null;
Log.e("CellInfoManager", ex.getMessage());
}
return jsonObject;
}
public JSONArray cellTowers() {
JSONArray jsonarray = new JSONArray();
int lat;
int mcc;
int mnc;
int aryCell[] = dumpCells();
lat = lac();
mcc = mcc();
mnc = mnc();
if (aryCell == null || aryCell.length 2) {
aryCell = new int[2];
aryCell[0] = cid;
aryCell[1] = -60;
}
for (int i = 0; i aryCell.length; i += 2) {
try {
int j2 = dBm(i + 1);
JSONObject jsonobject = new JSONObject();
jsonobject.put("cell_id", aryCell[i]);
jsonobject.put("location_area_code", lat);
jsonobject.put("mobile_country_code", mcc);
jsonobject.put("mobile_network_code", mnc);
jsonobject.put("signal_strength", j2);
jsonobject.put("age", 0);
jsonarray.put(jsonobject);
} catch (Exception ex) {
ex.printStackTrace();
Log.e("CellInfoManager", ex.getMessage());
}
}
if (isCdma())
jsonarray = new JSONArray();
return jsonarray;
}
public int cid() {
if (!this.valid)
update();
return this.cid;
}
public int[] dumpCells() {
int[] aryCells;
if (cid() == 0) {
aryCells = new int[0];
return aryCells;
}
ListNeighboringCellInfo lsCellInfo = this.tel.getNeighboringCellInfo();
if (lsCellInfo == null || lsCellInfo.size() == 0) {
aryCells = new int[1];
int i = cid();
aryCells[0] = i;
檢舉補充回答:
return aryCells;
}
int[] arrayOfInt1 = new int[lsCellInfo.size() * 2 + 2];
int j = 0 + 1;
int k = cid();
arrayOfInt1[0] = k;
int m = j + 1;
int n = asu();
arrayOfInt1[j] = n;
IteratorNeighboringCellInfo iter = lsCellInfo.iterator();
while (true) {
if (!iter.hasNext()) {
break;
}
NeighboringCellInfo localNeighboringCellInfo = (NeighboringCellInfo) iter.next();
int i2 = localNeighboringCellInfo.getCid();
if ((i2 = 0) || (i2 == 65535))
continue;
int i3 = m + 1;
arrayOfInt1[m] = i2;
m = i3 + 1;
int i4 = localNeighboringCellInfo.getRssi();
arrayOfInt1[i3] = i4;
}
int[] arrayOfInt2 = new int[m];
System.arraycopy(arrayOfInt1, 0, arrayOfInt2, 0, m);
aryCells = arrayOfInt2;
return aryCells;
}
public JSONObject gsmInfo() {
if (!isGsm()) {
return null;
}
JSONObject localObject = null;
while (true) {
try {
檢舉補充回答: JSONObject localJSONObject1 = new JSONObject();
String str1 = this.tel.getNetworkOperatorName();
localJSONObject1.put("operator", str1);
String str2 = this.tel.getNetworkOperator();
if ((str2.length() == 5) || (str2.length() == 6)) {
String str3 = str2.substring(0, 3);
String str4 = str2.substring(3, str2.length());
localJSONObject1.put("mcc", str3);
localJSONObject1.put("mnc", str4);
}
localJSONObject1.put("lac", lac());
int[] arrayOfInt = dumpCells();
JSONArray localJSONArray1 = new JSONArray();
int k = 0;
int m = arrayOfInt.length / 2;
while (true) {
if (k = m) {
localJSONObject1.put("cells", localJSONArray1);
localObject = localJSONObject1;
break;
}
int n = k * 2;
int i1 = arrayOfInt[n];
int i2 = k * 2 + 1;
int i3 = arrayOfInt[i2];
JSONObject localJSONObject7 = new JSONObject();
localJSONObject7.put("cid", i1);
localJSONObject7.put("asu", i3);
localJSONArray1.put(localJSONObject7);
k += 1;
}
} catch (JSONException localJSONException) {
localObject = null;
}
}
}
public boolean isCdma() {
if (!this.valid)
update();
自動定位需要特定的api,比如百度等。
在需要的地方調(diào)用第三方提供的api調(diào)用定位相關(guān)代碼就好。
(3,4,N)
上北下南左西又東
順時針排序:北東南西
北1 東2 南3 西4
(3,4,1)
左轉(zhuǎn)1+1=2東
右轉(zhuǎn)1-1=01,則0=4西
后轉(zhuǎn)1+2=3南
可以把朝向問題看成類似約瑟夫的問題。
用數(shù)組記錄當前坐標X Y 及朝向。用1,2,3,4代表北東南西
左轉(zhuǎn)后,(3,4,2)
往前一步,
當朝向不同的時候,有對應(yīng)的向前向后是改變哪個坐標值,
寫四個朝向時候的坐標的算法
然后調(diào)用,傳入2,則調(diào)用case=2時的動作,如果向前則~~~向后則~~~~再命令轉(zhuǎn)向則(調(diào)用處理方向改變的函數(shù))~~~~
最后輸出(,,),對最后一個兌換成“東南西北”輸出就行了
()
你好,可以配置一下log4j,放在項目的根目錄下,就會自定定位錯誤信息,并且定位到具體行
關(guān)于log4j的使用,首先把log4j.jar文件考到工程里面,src在新建log4j.properties文件
配置如下
#A1為控制臺輸出,A2為文件輸出,R為文件輸出,并且按天分割.級別為info??
log4j.rootLogger=info,A1,A2,R??
#將info級別的日志輸出到控制臺??
log4j.appender.A1=org.apache.log4j.ConsoleAppender??
log4j.appender.A1.Threshold=info??
log4j.appender.A1.layout=org.apache.log4j.PatternLayout??
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd?HH:mm:ss,SSS}?[%t]?[%c]?[%p]?-?%m%n??
#將info級別的日志輸出到文件,按天分隔??
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender??
log4j.appender.R.File=./logs/sslvpn.log??
log4j.appender.R.DatePattern?=?'.'yyyy-MM-dd??
log4j.appender.R.Threshold=info??
log4j.appender.R.layout=org.apache.log4j.PatternLayout??
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd?HH:mm:ss,SSS}?[%t]?[%c]?[%p]?-?%m%n??
#將error級別的日志輸出到文件??
log4j.appender.A2=org.apache.log4j.FileAppender??
log4j.appender.A2.File=./logs/error.log??
log4j.appender.A2.Threshold=error??
log4j.appender.A2.layout=org.apache.log4j.PatternLayout??
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd?HH:mm:ss,SSS}?[%t]?[%c]?[%p]?-?%m%n
log4j的功能很強大,可以將日志信息插入數(shù)據(jù)庫,希望可以幫到你
要定位到行,代碼要debug編譯,至少要帶上行信息。
線程占用內(nèi)存高低,可以用jmap做heap dump出來給MomoryAnalysis分析他可以按線程統(tǒng)計,一般也可以用它來找出造成OOM的原因。
線程占用CPU,上述內(nèi)存的問題是一個方面,另外也可以jstack打線程棧來分析。Linux上ps -T -p可以看底層線程的CPU占用(Windows上需要額外按工具),記得線程編號可以在jstack打出來的線程棧中檢查。