gpt4 book ai didi

android - 尝试使用电话类获取单元格位置时出现 ClassCastExeption 错误

转载 作者:行者123 更新时间:2023-11-29 15:23:49 24 4
gpt4 key购买 nike

我在 Google Play 上收到了一些关于 CdmaCellLocation 的报告(来自同一用户):

 java.lang.ClassCastException: android.telephony.cdma.CdmaCellLocation

这是一项使用蜂窝网络报告近似用户位置的服务,请注意它 100% 为我工作,我没有关于此错误的任何其他报告,这里是 onStart() 的代码:

  public class ServiceLocation extends Service{
int myLatitude , myLongitude;
private String str2;
static SharedPreferences prefs;
private String numtosend;

public int onStartCommand(Intent itn,int num1, int num2){

prefs = getSharedPreferences("Preferences",
Context.MODE_PRIVATE);

if(isAirplaneModeOn(this)){
stopSelf();
}


Bundle extras = itn.getExtras();

if(extras.containsKey("ExtraName") != true){
str2 = itn.getStringExtra("Number");
}
location(str2);

return 0;


}

这里是位置方法代码:

 public void location(String num){
// TODO Auto-generated method stub



TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
if(telephonyManager.getSimState() != TelephonyManager.SIM_STATE_ABSENT){
numtosend = "Phone Number (If Avaible) : " + " " + telephonyManager.getLine1Number() + " " + " Sim Serial : " + telephonyManager.getSimSerialNumber() + " " + "IMEI : " + telephonyManager.getDeviceId();
}
else {
numtosend = this.getResources().getString(R.string.txtNoSimCard) + telephonyManager.getDeviceId();
}
GsmCellLocation cellLocation = (GsmCellLocation) telephonyManager.getCellLocation();


int cid = cellLocation.getCid();
int lac = cellLocation.getLac();

if(RqsLocation(cid, lac)){




if(str2.equals("") != true && str2.equals(null) != true) {
SmsManager.getDefault().sendTextMessage(num, null, this.getResources().getString(R.string.txtGPSPosition) + "(40-250 Meters Accuracy) : "+"http://maps.google.com/?q="+String.valueOf((float)myLatitude/1000000) +","+String.valueOf((float)myLongitude/1000000), null, null);

}


if(gmailaccount.equals("") != true && gmailpass.equals(null) != true){



P m = new P(gmailaccount , gmailpass);

String[] Mail = {mail};
m.setTo(Mail);
m.setFrom("AnonymousMail@gmail.com");
m.setSubject("Location");
m.setBody(this.getResources().getString(R.string.txtGPSPosition) + "(~300 Meters Accuracy) : " + "http://maps.google.com/?q="+String.valueOf((float)myLatitude/1000000) +","+String.valueOf((float)myLongitude/1000000) + " " + str2 + " " + numtosend);

try {
if(m.send()){
stopSelf();
}
else {

if(str2.equals("") != true) {
SmsManager.getDefault().sendTextMessage(str2, null, "Impossible to Send a Message to your Emergency Mail Address !", null, null);
}
stopSelf();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}



}

}

else{
if(str2.equals("") != true && str2.equals(null) != true) {
SmsManager.getDefault().sendTextMessage(num, null, this.getResources().getString(R.string.txtInternetOffLocation), null, null);
}

if(gmailaccount.equals("") != true && gmailpass.equals(null) != true){
P m = new P(gmailaccount , gmailpass);

String[] Mail = {mail};
m.setTo(Mail);
m.setFrom("AnonymousMail@gmail.com");
m.setSubject("Location");
m.setBody(this.getResources().getString("Internet Off));

try {
if(m.send()){
stopSelf();
}
else {

if(str2.equals("") != true) {

}
stopSelf();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}



stopSelf();

}

最后是来自 Google Play 的 LogCat:

   java.lang.RuntimeException: Unable to start service com.xxx.xxx.xxx.ServiceLocation@4051b930 with Intent {            cmp=com.xxx.xxx.xxx/.ServiceLocation (has extras) }: java.lang.ClassCastException:                 android.telephony.cdma.CdmaCellLocation
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2052)
at android.app.ActivityThread.access$2800(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:994)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3683)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:875)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:633)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassCastException: android.telephony.cdma.CdmaCellLocation
at com.xxx.xxx.xxx.ServiceLocation.location(ServiceLocation.java:83)
at com.xxx.xxx.xxx.ServiceLocation.onStartCommand(ServiceLocation.java:53)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2039)
... 10 more

您认为这是电话供应商的问题,还是来自平板电脑?

[题外话] 顺便说一句,我在哪里以及如何举报:

enter image description here

最佳答案

GsmCellLocation cellLocation = (GsmCellLocation) telephonyManager.getCellLocation();

这是一个不安全的转换。您的代码假定此方法将始终返回 GsmCellLocation 的实例,但事实并非如此。有两种类型的蜂窝网络。 GSM 和 CDMA。

如果手机在 CDMA 网络上运行,则 getCellLocation() 将返回 CdmaCellLocation 的实例。

您可以调用 telephonyManager.getPhoneType() 来获取有关设备使用的 radio 类型的信息。此方法将返回四个值之一:

PHONE_TYPE_NONE - 该设备没有蜂窝 radio 。例如,它可以是没有 3G 调制解调器的平板电脑。 getCellLocation() 将返回 null

PHONE_TYPE_GSM - 设备有 GSM radio 。您可以安全地调用 (GsmCellLocation) telephonyManager.getCellLocation();

PHONE_TYPE_CDMA - 设备有 GSM radio 。您可以安全地调用 (CdmaCellLocation) telephonyManager.getCellLocation();

PHONE_TYPE_SIP - 设备使用 SIP(​​ session 发起协议(protocol))进行通信。 getCellLocation() 将返回 null

关于android - 尝试使用电话类获取单元格位置时出现 ClassCastExeption 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15191316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com