如何解决无法在诺基亚S60上检索CELL-id和LAC在E50中试用
我一直在尝试获取celllid,lac,mcc和mnc。虽然可以找到mcc和mnc,但cell-id和lac仍然为null。这是代码(众所周知,它根据正在进行的线程数工作,但我仍然无法使它工作)import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class Locinfo extends MIDlet {
private Form form;
private display display;
public void startApp() {
form = new Form(\"Location...\");
String cellid = getCellId();
String getLAC = getLAC();
String getMCC = getMCC();
String getMNC = getMNC();
form.append(cellid);
form.append(\"<-this is cell-id\");
form.append(getLAC);
form.append(\"<-this is LAC\");
form.append(getMCC);
form.append(\"<-this is MCC\");
form.append(getMNC);
form.append(\"<-this is MNC\");
display = display.getdisplay(this);
display.setCurrent(form);
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
public static String getCellId(){
String out = \"\";
try{
out = System.getProperty(\"com.nokia.mid.cellid\");
}catch(Exception e){
System.out.println(e);
out=e.toString();
return out;
}
return out==null?\"\":out;
}
public static String getLAC(){
String out = \"\";
try{
out = System.getProperty(\"com.nokia.mid.lac\");
}catch(Exception e){
out=e.toString();
return out;
}
return out==null?\"\":out;
}
public static String getimsI(){
String out = \"\";
try{
out = System.getProperty(\"imsI\");
if(out== null ||out.equals(\"null\")|| out.equals(\"\"))
out = System.getProperty(\"phone.imsi\") ;
if(out== null ||out.equals(\"null\")|| out.equals(\"\"))
out = System.getProperty(\"com.nokia.mid.mobinfo.imsI\");
if(out== null ||out.equals(\"null\")|| out.equals(\"\"))
out = System.getProperty(\"com.nokia.mid.imsi\");
if(out== null ||out.equals(\"null\")|| out.equals(\"\"))
out = System.getProperty(\"com.sonyericsson.imsi\");
if(out== null ||out.equals(\"null\")|| out.equals(\"\"))
out = System.getProperty(\"imsI\");
if(out== null ||out.equals(\"null\")|| out.equals(\"\"))
out = System.getProperty(\"com.samsung.imei\");
if(out== null ||out.equals(\"null\")|| out.equals(\"\"))
out = System.getProperty(\"com.siemens.imei\");
if(out== null ||out.equals(\"null\")|| out.equals(\"\"))
//#= out = GPRSInfo.getCellInfo().getBSIC();
if(out== null ||out.equals(\"null\")|| out.equals(\"\"))
out = System.getProperty(\"imsi\");
}catch(Exception e){
return out==null?\"\":out;
}
return out==null?\"\":out;
}
public static String getMCC(){
String out = \"\";
try{
if(out== null ||out.equals(\"null\")|| out.equals(\"\"))
out = System.getProperty(\"phone.mcc\") ;
if(out== null ||out.equals(\"null\")|| out.equals(\"\"))
out = System.getProperty(\"com.nokia.mid.mobinfo.imsI\");
if(out== null ||out.equals(\"null\")|| out.equals(\"\"))
out = System.getProperty(\"com.sonyericsson.net.mcc\");
if(out== null ||out.equals(\"null\")|| out.equals(\"\")){
out = getimsI().equals(\"\")?\"\": getimsI().substring(0,3);
}
if(out== null ||out.equals(\"null\")|| out.equals(\"\"))
out = System.getProperty(\"com.samsung.imei\");
if(out== null ||out.equals(\"null\")|| out.equals(\"\"))
out = System.getProperty(\"com.siemens.imei\");
if(out== null ||out.equals(\"null\")|| out.equals(\"\"))//getMNC()
//#= out = GPRSInfo.getCellInfo().getMCC();
if(out== null ||out.equals(\"null\")|| out.equals(\"\"))
out = System.getProperty(\"mcc\");
}catch(Exception e){
return out==null?\"\":out;
}
return out==null?\"\":out;
}
public static String getMNC(){
String out = \"\";
try{
if(out== null ||out.equals(\"null\")|| out.equals(\"\"))
out = System.getProperty(\"phone.mnc\") ;
if(out== null ||out.equals(\"null\")|| out.equals(\"\"))
out = getimsI().equals(\"\")?\"\": getimsI().substring(3,5);
if(out== null ||out.equals(\"null\")|| out.equals(\"\"))
out = System.getProperty(\"com.sonyericsson.net.mnc\");
if(out== null ||out.equals(\"null\")|| out.equals(\"\")){
out = getimsI().equals(\"\")?\"\": getimsI().substring(3,5);
}
if(out== null ||out.equals(\"null\")|| out.equals(\"\"))
out = System.getProperty(\"com.samsung.imei\");
if(out== null ||out.equals(\"null\")|| out.equals(\"\"))//getMNC()
//#= out = GPRSInfo.getCellInfo().getMNC();
if(out== null ||out.equals(\"null\")|| out.equals(\"\"))
out = System.getProperty(\"mnc\");
}catch(Exception e){
return out==null?\"\":out;
}
return out==null?\"\":out;
}
}
我从这里获取了代码(我现在希望它在nokia e50上运行,因此使用了com.nokia.mid.cellid(事实上,我也尝试过此链接上提到的所有其他选项))Cellid和lac都返回当正确返回mcc和mnc时为null。
解决方法
我确认无法从E50收到单元ID。但是我已经写了一种多平台解决方案,我将在广泛的设备(我们的生产环境中> 1000个设备)上对此进行检查。我从相同的链接获得了原型,但是老实说-编写它的人并没有透露细节。
我非常怀疑我的代码能否在至少一半的设备上运行,但是无论如何我们很快就会看到它。
package Device;
import dct.CellData;
public class DeviceInfo {
static private DeviceInfo instance;
private int platformID;
static public DeviceInfo instance(int platformID) {
if (instance == null || instance.platformID != platformID)
instance = new DeviceInfo(platformID);
return instance;
}
private DeviceInfo(int platformID) {
this.platformID = platformID;
}
private String readProperty(String propertyName) {
String val = System.getProperty(propertyName);
return (val == null || val.length() == 0 || val.equals(\"null\")) ? \"\" : val;
}
/**
* get the cell id in the phone
*
* @return
*/
public String getCellId() {
try {
String out = readProperty(\"Device-ID\");
if (out.length() > 0) return out;
out = readProperty(\"CellID\");
if (out.length() > 0) return out;
out = readProperty(\"phone.cid\");
if (out.length() > 0) return out;
String propertyName = null;
switch (platformID) {
case Platforms.PLATFORM_NOKIA:
propertyName = \"com.nokia.mid.cellid\";
break;
case Platforms.PLATFORM_SONY_ERICSSON:
propertyName = \"com.sonyericsson.net.cellid\";
break;
case Platforms.PLATFORM_SAMSUNG:
propertyName = \"com.samsung.cellid\";
break;
case Platforms.PLATFORM_LG:
propertyName = \"com.lge.net.cellid\";
break;
case Platforms.PLATFORM_MOTOROLA:
propertyName = \"phone.cid\";
break;
case Platforms.PLATFORM_SIEMENS:
propertyName = \"com.siemens.cellid\";
break;
case Platforms.PLATFORM_NOT_DEFINED:
default:
propertyName = \"cid\";
break;
}
return readProperty(propertyName);
}
catch (Exception ex) {
return \"\";
}
}
/**
* get the lac sring from phone
*/
public String getLAC() {
try {
String out = readProperty(\"phone.lac\");
if (out.length() > 0) return out;
String propertyName = null;
switch (platformID) {
case Platforms.PLATFORM_NOKIA:
propertyName = \"com.nokia.mid.lac\";
break;
case Platforms.PLATFORM_SONY_ERICSSON:
propertyName = \"com.sonyericsson.net.lac\";
break;
case Platforms.PLATFORM_MOTOROLA:
propertyName = \"LocAreaCode\";
break;
case Platforms.PLATFORM_SIEMENS: // didn\'t try to find
case Platforms.PLATFORM_SAMSUNG: // can\'t find
case Platforms.PLATFORM_LG: // not supported (http://sourceforge.net/tracker/index.php?func=detail&aid=3310226&group_id=192084&atid=939977)
case Platforms.PLATFORM_NOT_DEFINED:
default:
return \"\";
}
return readProperty(propertyName);
}
catch (Exception ex) {
return \"\";
}
}
/**
* Example IMSI (O2 UK): 234103530089555
* <p/>
* String mcc = imsi.substring(0,3); // 234 (UK)
* <p/>
* String mnc = imsi.substring(3,5); // 10 (O2)
*
* @return
*/
public String getIMSI() {
try {
String out = readProperty(\"IMSI\");
if (out.length() > 0) return out;
out = readProperty(\"phone.imsi\");
if (out.length() > 0) return out;
String propertyName = null;
switch (platformID) {
case Platforms.PLATFORM_NOKIA:
out = readProperty(\"com.nokia.mid.mobinfo.IMSI\");
if (out.length() > 0) return out;
propertyName = \"com.nokia.mid.imsi\";
break;
case Platforms.PLATFORM_SONY_ERICSSON:
propertyName = \"com.sonyericsson.imsi\";
break;
case Platforms.PLATFORM_LG:
propertyName = \"com.lge.imsi\";
break;
case Platforms.PLATFORM_SAMSUNG:
case Platforms.PLATFORM_MOTOROLA:
case Platforms.PLATFORM_SIEMENS:
case Platforms.PLATFORM_NOT_DEFINED:
default:
return \"\";
}
return readProperty(propertyName);
}
catch (Exception ex) {
return \"\";
}
}
/**
* For moto,Example IMSI (O2 UK): 234103530089555
* <p/>
* String mcc = imsi.substring(0,3); // 234 (UK)
*
* @return
*/
public String getMCC() {
try {
String out = readProperty(\"phone.mcc\");
if (out.length() > 0) return out;
String propertyName = null;
switch (platformID) {
case Platforms.PLATFORM_NOKIA:
propertyName = \"com.nokia.mid.countrycode\";
break;
case Platforms.PLATFORM_SONY_ERICSSON:
propertyName = \"com.sonyericsson.net.mcc\";
break;
case Platforms.PLATFORM_LG:
propertyName = \"com.lge.cmcc\";
break;
}
if (propertyName != null)
out = readProperty(propertyName);
if (out.length() == 0) {
out = getIMSI();
if (out.length() > 0)
out = out.substring(0,3);
}
return out;
} catch (Exception e) {
return \"\";
}
}
/**
* For moto,Example IMSI (O2 UK): 234103530089555
* <p/>
* String mnc = imsi.substring(3,5); // 10 (O2)
*
* @return
*/
public String getMNC() {
try {
String out = readProperty(\"phone.mnc\");
if (out.length() > 0) return out;
String propertyName = null;
switch (platformID) {
case Platforms.PLATFORM_NOKIA:
propertyName = \"com.nokia.mid.networkid\";
break;
case Platforms.PLATFORM_SONY_ERICSSON:
propertyName = \"com.sonyericsson.net.mnc\";
break;
case Platforms.PLATFORM_LG:
propertyName = \"com.lge.cmnc\";
break;
}
if (propertyName != null)
out = readProperty(propertyName);
if (out.length() == 0) {
out = getIMSI();
if (out.length() > 0)
out = out.substring(3,5);
}
return out;
} catch (Exception e) {
return \"\";
}
}
/**
* not used now
* <p/>
* get the IMEI (International Mobile Equipment Identity (IMEI)) in the phone
*
* @return
*/
public String getIMEI() {
try {
String out = readProperty(\"com.imei\");
if (out.length() > 0) return out;
String propertyName = null;
switch (platformID) {
case Platforms.PLATFORM_NOKIA:
propertyName = \"com.nokia.mid.imei\";
break;
case Platforms.PLATFORM_SONY_ERICSSON:
propertyName = \"com.sonyericsson.imei\";
break;
case Platforms.PLATFORM_SAMSUNG:
propertyName = \"com.samsung.imei\";
break;
case Platforms.PLATFORM_LG:
propertyName = \"com.lge.imei\";
break;
case Platforms.PLATFORM_MOTOROLA:
propertyName = \"com.motorola.imei\";
break;
case Platforms.PLATFORM_SIEMENS:
propertyName = \"com.simens.imei\";
break;
case Platforms.PLATFORM_NOT_DEFINED:
default:
propertyName = \"\";
break;
}
return readProperty(propertyName);
} catch (Exception e) {
return \"\";
}
}
public void fillCellData(CellData data) {
data.setCellid(getCellId());
data.setLAC(getLAC());
data.setMCC(getMCC());
data.setMNC(getMNC());
}
}
, 您提到的网站中您已阅读此行
但是get Cellid仍然受到手机平台,签名证书和运营商的限制:
诺基亚
s40第三Fp1版,要求操作员或制造商签名
S60第三版FP2(2008年及更新版本,不适用于N95),无需唱歌。
, 我刚刚在这里工作的是诺基亚设备S60和Symbian版本5,我正在尝试根据手机ID(而不是GPS)获取手机位置。因此,为此,我使用http://www.opencellid.org/,此页面检索了我的位置,但它与gps \'并不完全相同。但是,为此,我需要mnc,mcc,cellid和lac,而令我惊讶的是,这种设备并没有给我lac,mnc和mcc,例如lalchetian所说。我们这里有一个严重的问题。这些属性可能仅在某些设备中可用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。