当前位置:编程学习 > wap >>

TelephonyManager的getSimSerialNumber() 产生java.lang.NullPointerException问题

源代码如下
package cn.itcast.mobilesafe.receiver;

import cn.itcast.mobilesafe.ui.LostProtectedActivity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.telephony.SmsManager;
import android.telephony.TelephonyManager;
import android.util.Log;

public class BootCompleteReceiver extends BroadcastReceiver {
private static final String TAG = "BootCompleteReceiver";
private SharedPreferences sp;

@Override
public void onReceive(Context context, Intent intent) {
 Log.i(TAG,"重启完毕");
// 判断手机是否处于保护状态
 
 sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
boolean isprotecting = sp.getBoolean("isprotecting", false);
Log.i(TAG,"isprotecting ---   "+isprotecting);
if(isprotecting){
TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String currentsim =  manager.getSimSerialNumber();
Log.i(TAG,"currentsim ---   "+currentsim);
String realsim = sp.getString("sim", "");
Log.i(TAG,"realsim ----   "+realsim);
  if(!currentsim.equals(realsim)){ //sim 卡串号不同 这里是第30行
// 发送报警短信
Log.i(TAG,"发送报警短信");
SmsManager smsmanager = SmsManager.getDefault();
    String destinationAddress = sp.getString("safenumber", "");
smsmanager.sendTextMessage(destinationAddress, null, "sim卡发生了改变,手机可能被盗", null, null);
}


}


}


报错信息
05-12 12:16:22.824: E/AndroidRuntime(474): java.lang.RuntimeException: Unable to start receiver cn.itcast.mobilesafe.receiver.BootCompleteReceiver: java.lang.NullPointerException
05-12 12:16:22.824: E/AndroidRuntime(474):  at android.app.ActivityThread.handleReceiver(ActivityThread.java:1905)
05-12 12:16:22.824: E/AndroidRuntime(474):  at android.app.ActivityThread.access$2400(ActivityThread.java:155)
05-12 12:16:22.824: E/AndroidRuntime(474):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1049)
05-12 12:16:22.824: E/AndroidRuntime(474):  at android.os.Handler.dispatchMessage(Handler.java:130)
05-12 12:16:22.824: E/AndroidRuntime(474):  at android.os.Looper.loop(SourceFile:351)
05-12 12:16:22.824: E/AndroidRuntime(474):  at android.app.ActivityThread.main(ActivityThread.java:3820)
05-12 12:16:22.824: E/AndroidRuntime(474):  at java.lang.reflect.Method.invokeNative(Native Method)
05-12 12:16:22.824: E/AndroidRuntime(474):  at java.lang.reflect.Method.invoke(Method.java:538)
05-12 12:16:22.824: E/AndroidRuntime(474):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:969)
05-12 12:16:22.824: E/AndroidRuntime(474):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:727)
05-12 12:16:22.824: E/AndroidRuntime(474):  at dalvik.system.NativeStart.main(Native Method)
05-12 12:16:22.824: E/AndroidRuntime(474): Caused by: java.lang.NullPointerException
05-12 12:16:22.824: E/AndroidRuntime(474):  at cn.itcast.mobilesafe.receiver.BootCompleteReceiver.onReceive(BootCompleteReceiver.java:30)
05-12 12:16:22.824: E/AndroidRuntime(474):  at android.app.ActivityThread.handleReceiver(ActivityThread.java:1894)
05-12 12:16:22.824: E/AndroidRuntime(474):  ... 10 more
05-12 12:16:22.966: E/AEE/LIBAEE(205): read_cmdline:cn.itcast.mobilesafe
05-12 12:16:22.966: E/AEE/AED(88): jni/../aed/aed_trace.c, 158, No such file or directory
这个广播是每次重启手机时候就会启动,这个广播的作用是查看以前绑定的sim卡信息跟现在的是不是一样,不是一样就发短信safenumber(一个手机号码)

关键问题来了。。。。这个程序在模拟器启动没有一点问题,真机调试的时候就报上面的错。。
而且我用R.E文件管理器打开SharedPreferences保存数据(保存sim串号等的数据)的一个xml文件,然后修改它。。。的确可以修改成功,但是下次重新启动android应用程序的时候,xml又会全部恢复原来的情况。为什么呢?  --------------------编程问答-------------------- 当我把这个广播从android.intent.action.BOOT_COMPLETED改成android.intent.action.NEW_OUTGOING_CALL(拨打电话号码时候广播)的时候,就不会报上面的错。。当发生android.intent.action.NEW_OUTGOING_CALL这个广播时候,xml就会恢复原来的样子,即修改没有效果 --------------------编程问答-------------------- 我也遇到了同样的问题,求同 --------------------编程问答-------------------- SIM卡的串号有些手机获取不到吧,直接对比IMSI即可
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,