android 代码获取IMEI,IMSI都为空,怎么解决

android 代码获取IMEI,IMSI都为空,怎么解决,第1张

Android获取IMSI和IMEI :

IMSI是一个唯一的数字,标识了GSM和UMTS 网络里的唯一一个用户

它存储 在手机的SIM卡里,它会通过手机发送到网络上。

IMEI也是一串唯一的数字,标识了GSM 和UMTS网络里的三星 Galaxy I9100。

它通常被打印在手机里电池下面的那一面,拨  #06# 也能看到它。

代码:

这里是你在Android里读出 唯一的 IMSI-ID / IMEI-ID 的方法。

Java:

String myIMSI =

androidosSystemPropertiesget(androidtelephonyTelephonyPropertiesPROPERTY_IMSI

);

// within my emulator it returns:   310995000000000

String myIMEI =

androidosSystemPropertiesget(androidtelephonyTelephonyPropertiesPROPERTY_IMEI

);

// within my emulator it returns:   000000000000000

手机号码不是所有的都能获取。只是有一部分可以拿到。这个是由于移动运营商没有把手

机号码的数据写入到sim卡中。sim卡只有唯一的编号,供网络与设备识别那就是imsi号码,手机的信号也可以说是通过这个号码在网络中传递的,并不是手机号码。

试想,你的sim丢失后,补办一张新的会换号码吗 —不会就是因为在你的手机号码对应的 imsi号在移动运营商中被修改成新sim卡的imsi号码。

这个就像是一个变量,当移动运营商为它赋值了,它自然就会有值。不赋值自然为空。

/   获得手机的一些标志符      @param c   @return String 手机的类型 /

public String fetch_status(Context c) {

TelephonyManager tm = (TelephonyManager) c

getSystemService(ContextTELEPHONY_SERVICE);//

String str = "";

String IMSI = tmgetSubscriberId();

str += "DeviceId(IMEI) = " + tmgetDeviceId() + "/n";

str += "DeviceSoftwareVersion = " + tmgetDeviceSoftwareVersion()

+ "/n";

str += "Line1Number = " + tmgetLine1Number() + "/n";

return str;

}

手机使用IMEI和IMSI登录到GSM网络的,由GSM网络侧负责将IMSI和映射成手机号(MSISDN),以及执行相反方向的映射。

(一)、SIM card 号的修改:

SIM card号就是印制在SIM上的一串数字。

读SIM card号的AT命令为:AT+CRSM=176,12258,0,0,10

因此在andorid模拟其源码中找到该AT命令——在sim_cardc中:

const char

asimcard_io( ASimCard sim, const char cmd )

{

int nn;

#if ENABLE_DYNAMIC_RECORDS

int command, id, p1, p2, p3;

#endif

static const struct { const char cmd; const char answer; } answers[] =

{

{ "+CRSM=192,28436,0,0,15", "+CRSM: 144,0,000000146f1404001aa0aa01020000" },

{ "+CRSM=176,28436,0,0,20", "+CRSM: 144,0,416e64726f6964ffffffffffffffffffffffffff" },

{ "+CRSM=192,28433,0,0,15", "+CRSM: 144,0,000000016f11040011a0aa01020000" },

{ "+CRSM=176,28433,0,0,1", "+CRSM: 144,0,55" },

{ "+CRSM=192,12258,0,0,15", "+CRSM: 144,0,0000000a2fe204000fa0aa01020000" },

{ "+CRSM=176,12258,0,0,10", "+CRSM: 144,0,98101430121181157002" },

因此用UE二进制方式打开emulator-armexe 或 emulator-x86exe,并搜索字符串“98101430121181157002”,然后将其修改成需要的SIM card号。

比如:

00209a00h: 31 30 00 00 2B 43 52 53 4D 3A 20 31 34 34 2C 30 ; 10+CRSM: 144,0

00209a10h: 2C 39 38 31 30 31 34 33 30 31 32 31 31 38 31 31 ; ,981014301211811

00209a20h: 35 37 30 30 32 00 2B 43 52 53 4D 3D 31 39 32 2C ; 57002+CRSM=192,

(二)、IMEI、IMSI号的修改:

Java代码中获取手机的IMEI号与ISMI号途径为:

TelephonyManager manager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);

String imei = managergetDeviceId();

String imsi = managergetSubscriberId();

在android的源码树中找到类TelephonyManager的实现:

成员函数getDeviceId:

/

Returns the unique device ID, for example, the IMEI for GSM and the MEID

or ESN for CDMA phones Return null if device ID is not available

<p>Requires Permission:

{@link androidManifestpermission#READ_PHONE_STATE READ_PHONE_STATE}

/

public String getDeviceId() {

try {

return getSubscriberInfo()getDeviceId();

} catch (RemoteException ex) {

return null;

} catch (NullPointerException ex) {

return null;

}

}

成员函数getSubscriberId:

/

Returns the unique subscriber ID, for example, the IMSI for a GSM phone

Return null if it is unavailable

<p>

Requires Permission:

{@link androidManifestpermission#READ_PHONE_STATE READ_PHONE_STATE}

/

public String getSubscriberId() {

try {

return getSubscriberInfo()getSubscriberId();

} catch (RemoteException ex) {

return null;

} catch (NullPointerException ex) {

// This could happen before phone restarts due to crashing

return null;

}

}

上面两个成员函数最终调用共同的一个私有成员函数getSubscriberInfo():

private IPhoneSubInfo getSubscriberInfo() {

// get it each time because that process crashes a lot

return IPhoneSubInfoStubasInterface(ServiceManagergetService("iphonesubinfo"));

}

而上面私有函数getSubscriberInfo获取的手机IMSI和IMEI号被硬编码在文件android_modemc中:

/ the Android GSM stack checks that the operator's name has changed

when roaming is on If not, it will not update the Roaming status icon

this means that we need to emulate two distinct operators:

- the first one for the 'home' registration state, must also correspond

to the emulated user's IMEI

- the second one for the 'roaming' registration state, must have a

different name and MCC/MNC

/

#define OPERATOR_HOME_INDEX 0

#define OPERATOR_HOME_MCC 310

#define OPERATOR_HOME_MNC 260

#define OPERATOR_HOME_NAME "Android"

#define OPERATOR_HOME_MCCMNC STRINGIFY(OPERATOR_HOME_MCC) \

STRINGIFY(OPERATOR_HOME_MNC)

#define OPERATOR_ROAMING_INDEX 1

#define OPERATOR_ROAMING_MCC 310

#define OPERATOR_ROAMING_MNC 295

#define OPERATOR_ROAMING_NAME "TelKila"

#define OPERATOR_ROAMING_MCCMNC STRINGIFY(OPERATOR_ROAMING_MCC) \

STRINGIFY(OPERATOR_ROAMING_MNC)

/ a function used to deal with a non-trivial request /

typedef const char (ResponseHandler)(const char cmd, AModem modem);

static const struct {

const char cmd; / command coming from libreference-rilso, if first

character is '!', then the rest is a prefix only /

const char answer; / default answer, NULL if needs specific handling or

if OK is good enough /

ResponseHandler handler; / specific handler, ignored if 'answer' is not NULL,

NULL if OK is good enough /

} sDefaultResponses[] =

{

/ see onRadioPowerOn() /

{ "%CPHS=1", NULL, NULL },

{ "%CTZV=1", NULL, NULL },

{ "!+VTS=", NULL, handleSetDialTone },

{ "+CIMI", OPERATOR_HOME_MCCMNC "000000000", NULL }, / request internation subscriber identification number /

{ "+CGSN", "000000000000000", NULL }, / request model version /

{ "+CUSD=2",NULL, NULL }, / Cancel USSD /

/ end of list /

{NULL, NULL, NULL}

};

因此用UE二进制方式打开emulator-armexe 或 emulator-x86exe,并搜索字符串"+CGSN"修改为需要的IMEI号;搜索"+CIMI"修改为需要的IMSI号。需要注意的是 IMSI 号的头六个数字"310260"不能修改,否则模拟器无法与网络连接。

例如:

001fc700h: 33 00 41 00 48 00 21 2B 56 54 53 3D 00 2B 43 49 ; 3AH!+VTS=+CI

001fc710h: 4D 49 00 33 31 30 32 36 30 30 30 30 30 30 30 30 ; MI3102600000000

001fc720h: 30 30 00 2B 43 47 53 4E 00 30 30 30 30 30 30 30 ; 00+CGSN0000000

001fc730h: 30 30 30 30 30 30 30 30 00 2B 43 55 53 44 3D 32 ; 00000000+CUSD=2

正确使用第三方应用软件,避免死机、白屏等系统冲突

 正确使用第三方应用软件,避免死机、白屏等系统冲突

一、常见手机软件的格式

symbian系统的程序(包括软件、游戏、主题桌面程序),其安装卸载原理都是相同的。symbian系统的程序一般有以下几类:

sis和sisx 分别的是第一、二版和第三版标准的Symbian OS *** 作系统唯一的可执行安装的安装文件,直接传入手机安装即可。

app一般来说app文件是某个软件的破解补丁文件,就是可以将未注册的软件变成已注册软件的文件。一般使用app破解的方法:利用文件管理程序(如文件动力)将某个软件一同带的app文件通过数据线或其他方式复制到存储卡中,先安装主程序,打开文件管理器软件,如FileMan 软件,找到存储卡中的这个app文件,编辑——复制,再找到这个软件安装目录的system——apps——这个软件文件夹里,编辑——粘贴,提示是否覆盖原文件,选“是”就可以完成破解了,既把此文件将源文件覆盖,即可完成解密。

rsc *** 作系统的程序资源文件,现在一般是某个软件的汉化补丁文件,可以将原英文软件里的代码替换成中文代码,使用方法和是破解补丁一样的,利用文件管理程序把此文件将源文件覆盖,即可完成汉化。

jar是第三方Java平台支持的java程序安装文件,一般为Kjava的游戏,直接传入手机直接安装即可。

exe 最多的是注册器,只要输入自己手机的IMEI号码,就会生成一串数字,把它输入到手机里,那个软件就是完全版的了。另外的就是电脑上的终端程序,需要在电脑上安装,否则无法使用。如著名的“RemoteS60”和“BemusedServer”。

jad 安装路径文件,无需安装 (现在一般都没有)。

txt 多为软件介绍和使用方法,E文的。

html 多为软件介绍和使用方法,还有其软件的主页链接。

pdf 多为软件介绍和使用方法,E文的。

nfo 一般是解密者的介绍,可用手写版打开,有时里面会包涵软件的注册码 。

bk1 软件备份数据,里面会包涵软件的注册信息。

rar可以先在PC上解压看看看,如果里面有sis后缀的软件,就解开,把SIS文件发送到手机上安装,如果解压开,里面有 “META-INF”这个文件夹还有一大堆别的文件,就是Java的软件,一般JAR格式的就是java的是专用格式的,后缀都是jar的,在PC上有RAR压缩软件时会被误成是rar格式的,就不要解压了,直接将原压缩包(必须是原始压缩包)发送到手机上,直接点击就可以自动安装,如果在PC上直接显示jar的后缀就看都不用看了,可以直接发送到7610里安装了。

blz格式是某些游戏的安装程序,需要先安装blzinstappsis模拟平台,把blz的文件放在你的E盘根目录,然后在这个平台里安装选择blz程序安装。

gbc格式是GB游戏的安装程序,需要先安装goboysis模拟平台,然后在这个平台里安装选择gbc程序安装一般把游戏文件改成英文名安装后才可正常运行

注意:已经解开的程序文件夹,手动复制到E盘的各个相应文件夹就可以。

安装软件或游戏可以通过四种方法安装:

在软件安装前先具备几个条件:

一是传送软件到手机上的几个设备,如:已经安装好驱动的数据线及PC套件),蓝牙适配器或读卡器等,

二是已经下载到PC上的S60安装软件,说到安装软件,第三版S60系列机器程序文件通常有sisx、jar。两者相当于pc里的 setupexe,只要在手机自带的文件管理里直接开启即可安装。另外,尽量把程序安装在mmc卡上,保持较大的机器空间对提高机器的稳定性有好处。

(1)用数据线配合PC套件安装。连接好数据线,打开PC套件,选择界面里的安装软件(本人推荐上种安装方法),或直接传送文件到手机里,然后再安装就可以了;

(2)通过蓝牙适配器安装。连接好蓝牙适配器,搜索到PC或手机,从PC上传送SIS的安装文件到手机上,在消息里打开就可以直接安装了,安装完毕后将消息里的蓝牙消息就可以删除了;

(3)通过读卡器安装。关机后取出存储卡,如果你的读卡器不能直接读取存储卡,就加上适配器使用,将安装的SIS文件复制到存储卡上,然后装进手机,在工具——文件管理——方向键向右,在里面找到刚才传的SISX安装文件,直接打开就可以自动安装了;安装后也需要删除存储卡里复制过来的原始安装文件;

(4)通过邮件提取法安装,先将安装文件通过邮箱发送到手机设置的那个邮箱里去,到手机里的信息——信箱里接收邮件,然后提取附件,最后还是按照以上的方法安装就可以了。

(5)复盖安装法:还有一种SIS文件的另类安装方法,就是通过UnMakeSIS软件在PC上将SIS软件的打包文件解开,直接复制里面的文件到指定文件夹即可,例如解开某个程序后共生成9个文件,将附带这9个文件连同外面的r文件夹一同复制到你要安装的盘符下(建议安装在E盘)的相应文件夹中,之后就会自动在功能表中生成这个程序的运行图标,点击即可进入该程序,我们在这里不推荐大家这样安装软件,知道方法就可以了。

上 软件、游戏、主题桌面程序都为symbian系统的程序,所以原理都是相同的。

注意:1、警告的提示,如要求你安装试用后24小时内删除此软件等,这一般都是软件的版权保护说明,即要求我们购买正版软件,如果你支持正版的话,可以在试用后将其删除,然后去 KF或网上购买安装正版软件,但假若你不愿意购买正版软件,这个也是一样用的,还有一些软件由于是第三方软件公司未经授权开发的软件,并没有经过 NOKIA或Symbian的软件测试认证,在安装时会有安全警告提示,是正常的,不用担心,放心安装就可以了,比如有时候会出现“应用程序和手机不兼容,退出安装?”如果点“是”的话就取消这次安装了,点“否”的话就继续安装下去。

2、关于Java软件或游戏的安装方法和SIS软件几乎是一样的,Java 软件或游戏的统一格式是jar格式的,一般软件下载下来后可能还会有一个jad文件,这个jad文件是jar文件的描述文件,在S40的机器上必须安装,但在S60的机器上就可以不用安装,直接扔掉就可以了。在某些玩家的PC机器上会把jar格式的文件显示成rar压缩格式,因为它也是一种特殊的压缩包,可以通过WinRAR等解压缩软件将其解开的,只要里面有“META-INF”这个文件夹,还有很多别的诸如class等文件,这就是Java的安装软件了,不需要解压,直接将原压缩包(必须是原压缩包)发送到手机上,直接点击就可以自动安装,如果在PC上直接显示jar的后缀就看都不用看了,可以直接发送到手机里安装了;不过在这里说一下,因为第二版以上的手机的Java扩展是是Java20的,对Java11支持不是很好,大部分不兼容,有部分Java软件安装后不能运行的。而且目前市面上的Java软件大多以Java MIDP11的为主,所以建议还是不要安装 Java游戏或软件。不过N93等S60系统对java的兼容性比S40有了长足的提高。一些jar程序的安装必须把jar安装文件改成英文名安装后才可正常运行。

3、关于安装前的设置:软件安装后的图标会自动归到我的助理文件夹内,当然可以根据自己的习惯再转移到其他文件夹内,由于S60第三版机型加强了对安装软件的保护性,所以为了顺利的完成安装过程,我们先进入程序管理内进行设置下软件安装:可以选择仅限已注册的程序/全部,为了顺利安装所有S60第三版机型适用的软件,建议大家选择全部。在线证书检查:可以选择必须通过检查/开/关在这里也是为顺利安装所有第三版机型适用的软件,建议大家选择 关。 [注意:手机时间及日期也需要按照当时的时间日期正确设置好]默认网址:这个部分可以不用去理会。(注:E为存储卡.C为手机机身存储.)。

三、软件的删除

所有程序必须在关闭后才能正常卸载。有一些常驻内存的程序尤其要关闭后才能卸载,否则将会出现错误。正常安装的程序请到程序管理中的列表里找到后卸载。如果是手动安装的程序,手动进入相应目录,进行手动删除。

1、软件的删除方法:

a常规方法:这种方法是最简单的,也最实用的 没有用了的或想删除了的软件必须到功能表的程序管理里面去删除,找到要删除的软件,按“C”键或按选项菜单里的删除来删除软件。

b、如何删除在程序管理里无法正常卸载的软件?某些软件运行时在任务栏列表中是不可见的,而是以进程的方式在后台运行,常见的有来电防火墙、短信防火墙类软件、杀毒软件、加密软件、手机锁、字体等所有开机自启动的软件等需要实时监控的软件,因此,当然无法删除正在运行中的软件。就象我们用计算机时,如果打开一个文件,并不关闭它,想删除它就是不行的一样。

解决方法为:

用论坛里提供的进程管理器(如文件动力、进程管理软件等)查看进程表,如你能判断哪个线程是该程序的进程,则可以关闭它,如无法判断则可以先设置不显示系统进程,然后关闭所有的非系统进程,这样就可以到程序管理里正常卸载软件了。

修改文件名或是属性后删除。

修改文件所在的文件夹名,再重启后就可用第1或第2种方法进行删除。

c、无法删除软件的问题解决---用读卡器删除:

如安装软件后无法删除可用读卡器打开E盘(SD卡),\sis\uninstall\目录下有很多文件夹如:20000555_00000000 再打开此这些文件夹里面有还E文件夹,里面有个log文件内容如下::\sys\install\sisregistry\20000555 \00000000_0000ctl

de:\sys\bin\screenshotexe

|e:\resource\apps\Screenshotmif

|e:\resource\apps\Screenshotrsc

:\private\10003a3f\import\apps\Screenshot_regrsc

Pe:\private\20000555\

在这文件里面有软件安装的路径,找到这些文件后将其删除。再删除C:\PreinstalledAppscachedat文件删除。再看看功能表有没有该图标。从:\sys\install\sisregistry\20000555\00000000_0000ctl可以看出图标文件存放在C这里。用Y-管理器删除C盘下整个SYS文件夹,重新启动。

2、清除"程序管理"里面的未安装sis程序

因为在S60第三版里面,文件构架很不一样了而且打包受保护的程序为sisx时会在机里无法安装所以有很多软件都是覆盖的安装版本,如sisxQQ这样就很容易因为安装的不慎导致残留文件,使在开机时出现"正在安装"的提示,和在"程序管理"里面有未安装的,而且还删不掉。

1)先去"程序管理",把那未安装文件名记录下来

2)然后用读卡器,或者使用大容量模式

3)打开:\private\10202dce\下,找到同名文件,然后把它删除,其实这样子,在程序管理里面已经没有那个未安装的提示了,但这个只是取消那个提示,不是完整删除,对于结构简单的程序,很容易解决,但对于复杂的程序,就比较难清理光了

4)可以回到:\private\,然后找到之前那个文件的前面同名的文件夹,把整个文件夹删除,就可以

5)再到:\resource\apps\下看能不能找到名称包含之前你删除的文件,再,把它删除!

6)同样在:\private\10003a3f\import\apps\,使用与resource一样的方法查找,只要做完第3步就可以达到想要的效果了。

当然,如果是通过PC来安装程序(sis/sisx/jar)的话,有些程序可能就会残留在 c:\Data\Installs\的文件夹里,而且残留在这里的就是安装程序(软件)。如果是通过手机来安装程序的话,就不会出现这种现象。这时可使用 [Y-管理器] 或 [Q-管理器] 把 c:\Data\Installs\文件夹里的所有程序文件删除掉(因都是程序文件,可以放心删除),然后你打开 [程序管理]时会发现,之前的未安装程序已经不存在了,那样就可以大大释放C盘的空间容量。

四、正确合理地使用第三方软件,减少系统死机和错误

智能手机的拓展功能很强,可以说,目前所有的智能手机的功能都能够通过安装第三方应用的软件来拓展其功能。

用好智能手机,发挥其最大效能,关键是要解决好以下三个问题:

一是需要哪些功能才能满足自己的需要,

二是哪些应用软件具有自己需要的功能,同时又适应自己手机的系统要求。

三是安装哪些软件既能满足自己的需要又能保证手机系统能正常运行。

上述三个问题,并没有一个具体的标准和答案,不少软件的功能,在一定程度上均有重复和交叉,如何选用软件,这取决于机主的工作性质、生活习性及个人爱好以及对手机的依赖程度,不能一慨而论。

不少新手在不明白上述三点的基础上,都喜欢安装一些软件,一味追求功能的新颖性,或出于猎奇心理或由于对手机的 *** 作系统缺乏必要的了解,见软件就装,有新版就升级,往往由于软件冲突或版本不兼容或使系统内存过小,造成手机运行缓慢,破坏手机原有的功能,甚至导致手机系统不稳定,经常性的当机,结果都是事后不断删除,也有不少人因为安装软件问题,使手机系统出现故障,由于找不原因,造成手机不应该进行的格式化功无奈刷机。

下面,就系统死机、定格和白屏等问题,结合合理使用第三方软件,减少系统死机和错误,谈点个人的观点,不一定对,仅供参考:

1、产生系统死机、定格和白屏等问题的原因探讨

我们用的3RD手机或多或少都出现过死机,白屏,黑屏的问题。手机的这些问题通常表现有这么几种:

1)手机自动重起,或是黑屏重起,有的是花屏;

2)白屏,按键失效,死机!白屏的现象多是手机自身的系统所造成的,这也有第三版系统先天性不足的原因。

3)定格在某一界面,但过几分钟自动恢复;

4)黑屏,换不醒手机界面。

造成这几种现象的原因有这样几种:

A、个人 *** 作 *** 作过快、打开的软件太多。

B、3RD的软件!!安装较多的软件!有的软件都是相互冲突!或是软件的错误!兼容性等问题!这是造成黑屏重起的主要的原因。如:不少第三方字体软件安装会出现黑屏重起或是白屏现象。若换字体(部分字体软件)会和掌上书院及一些需要调用字体的软件(如来电能通、QQ等,也和一些网络软件相互冲突,造成不能上网,要恢复原机自带的字体后才能上网。这类问题比较严重!!直接死机问题定格,只能拔电池重启动。

C、第三方软件的BUG问题,只有删除了才能解决。

D、C盘或卡里的遗留文件垃圾没有清理:有的软件安装后再删除的话,可能会的残留文件删除不干净,需要我们连接电脑手动进行删除。垃圾文件一般在RESOURCE、SYS、以及PRIVATE和SYSTEM中,比如QQ MIMO 键盘锁情景切换等!!

手机的(C盘)也会有一些垃圾的文件!!其中上网会产生如CACHE文件夹就是垃圾;我们打开贪食蛇、收音机、计算器等也会在SYSYEM下生成文件!!

E、卡的质量问题,卡和手机兼容性不好也是经常导致系统死机的重要原因。

F、手机下载的在用主题过大,导致系统过慢和死机。

G、发短信时系统定格(这和第一、二版手机发信息报错的原因是一样的):这是s60手机的通病,也是NOKIA智能手机常见的短信出错现象,这在第一版的3650,6600,7610还有NG系列上就很常见了。

H、机子硬件本身的问题:如在天气比较热时,死机的频率要大些,这可能与CPU本身的温度系数有关。

此外,电量过低也会导致系统死机。

除软件冲突外(将在下面叙述),一般来说解决系统死机的简单方法有:

1)、在进行程序 *** 作的时候,按键的速度要慢些,不能过快,否则会导致死机、重启、黑屏、白屏等现象(特别是第三版手机,在进入一些菜单的过程中,会有需要 20 秒左右才能进入的情况,此时乱按键会导致系统冲突而死机)。

2)、遇到开机出现“系统错误”,停在“NOKIA”白色画面不动的情况,就按住“笔形键”,狂按“确认键”(打勾键),强制进入机子,然后用 seleq删除C和E底下的system/recogs文件夹,关机->开机(此方法还蔢献傲诵氯砑�蟛荒艽��6�0��裙收希�br /> 3)、遇到开启程序时死机,尽可能让手机自动重启,宁可多等几分钟,也尽量不用拔电池的方法重启动(这样对手机硬件不利)。

4)、实在不行可拔下电池,SIM卡再让它重启动。

5)、拔下电池再装上后用直充充电开机。

6)、最后实在不行,只有格式化手机了。

当然,你在格式化之前最好先参考以下两点:

1)拔卡,重启,(这个步骤是检验问题软件是在c盘还是在卡的方法,如拔卡问题解决,那毛病就是存在于卡中的软件。)

2)开机时按住笔形键至完全开机(这相当于电脑的安全启动,所有自启动软件关闭),主要看看关于是不是有哪些随机启动的软件的影响,特别是在出现问题前后一段时间内安装的软件程序,然后试试删除这些软件,再重启试试。还不行再格机不迟。

最后,如果格机后仍然不行,则应尝试刷机和送检。

2、安装第三方应用软件的八大基本原则

1)、尽可能不安装在C盘(一些必须装在机里的就没办法啦):

一个新的程序,未经他人证实能不能够在自己的手机上运行,切记不要安装在C盘,一是防止占用手机内存导致手机速度减慢;二是以免系统冲突时无法开机或频频死机重启而需要硬格式化损失数据,而装在存储卡上如果出了问题可以把卡取下来,再开机,用读卡器把整个程序的安装目录删除即可。因此,安装SISX文件或者JAVA文件,注意如无特殊说明,尽量安装在卡上。

2)、尽可能不安装随机自启动的软件:

就说来电通吧,你要随机自启动干吗?(个人之见),你手机的电话号码你总知道是哪儿的吧,实在不知道你可以先不接啊,再开来电通查一下来电所在地(短信也可以查),有心要回电也不迟啊!来个自启动,占用200多K运行内存不说,系统慢点也无所谓,如果此时你用语音报时功能和语音拨号功能,嘿嘿,可能就会死机了。

3)、与手机自带功能相同的软件尽量不装:

很多朋友在不熟悉自己手机自带功能的情况下,一味追求安装第三方应用软件,其实这不一定是对的。以下对一些软件说点个人看法:

A、自动锁键盘程序:为什么不用手机自带功能?事实上,在你的手机上完全可以做到自动锁键盘,方法如下:进入设置→安全性设置→手机和SIM卡→自动锁闭前等待时间→用户自定义→输入时间→输入锁码→确认。

B、闹钟类软件:装它干吗,先不说有多少人用手机当闹钟用,就是你要用,手机上不是有吗? 日历→选项→设置→日历→时钟选项→设置→时钟闹铃铃声。

哦,你们说的是N机的闹钟只能设一次用一次,不能设周期性闹钟吧?不尽能吧,你看看下面这一段后,你再试试:首先打开日历表,然后在“选项”中选择“新日历项”-“约会”,然后根据自己的需要分项设置内容。例如:主题-起床,地点-家里,开始时间-06:30,结束时间-07:00,开始日期-当前日期,结束日期-当前日期,闹铃-开,闹铃时间-06:40,闹铃日期-当前日期,重复-每天,重复结束日期: 2006/03/10。就OK了,以上是我自己的设置,可根据自己的需要随意设置闹铃的循环周期及响铃时长,如设置的响铃时长是半小时,那么在半小时之内每隔5分钟就响铃一次重复提醒,即不须借助于第三方软件在后台运行,也可实现周期循环和响铃循环,而且可根据需要设置多时段、多方式的事件提醒及约会等等,非常方便。

C、名片备份软件:那更不用装了,手机上就可以完整地备份你的名片夹:单个名片从 机身-复制至-sim卡 的 *** 作:光标移动到需要复制的联系人名单,然后按 左功能键 选项-复制-至SIM卡电话薄。

选择性或者全部名片从 机身-复制至-sim卡 的 *** 作:选择性复制时先标记需要复制的联系人名单,全部复制时只需要选择全部标记联系人名单,然后按 左功能键 选项-复制-至SIM卡电话薄

将联系人复制到存储卡:选择需要复制的联系人名单,单个/选择性/全部 复制到存储卡即可这样就无须使用第三方软件进行名片备份 *** 作了。

恢复联系人名单:在我们格式化机器或者需要恢复名片的时候,只需要在名片夹中按 左功能键 选项-复制-从存储卡然后就可以恢复以前备份过的联系人名单了。

S60第三版机型备份到存储卡的联系人名单文件存放位置:存储卡/Others/Contacts/下。手机上这种自带的备份功能不好吗?我可认为可靠的很。

D、再说智能影院:这是个很不错的软件,对AVI格式的影片的支持性特好。可问题是,我们为什么非要看AVI格式的影片?

手机自带的Realplayer播放器,对3GP、MP4和一些RM格式都支持,特别是3GP和MP4格式的影片最好的,我们为什么不能看这些格式?有人说Realplayer不支持全屏播放,这又是对自己手机功能不熟悉的表现,Realplayer 视频播放支持全屏欣赏,可以快进快退,导航键左-音量减小,导航键右-音量增大,导航键上(长按)-快进,导航键下(长按)-快退,导航键中心-暂停,按 2键-全屏,按任意键-返回。此功能没有选项和图标按键,按住摇杆向上方向为快进,按住摇杆向下为快退。注意是按住,按一下是没反应的,快进快退的进度可以看上方的视频时间。

多啦,我们自己摸索吧

4)、与系统自带和其他软件有冲突的软件尽量不装

如:OfficeSuite和自带的TXT程序相冲突,本来你打开TXT文件,系统就可以在记事本中打开,可装了OfficeSuite后,就会用OfficeSuite以DOC的文件方式打开,这当然只是小冲突,不会导致系统死机;

再如A4输入法与智能影院就有冲突,会造成智能影院退出甚至播放时死机;

再如,如果你安装了智能闹钟类的软件,(HandyClock,中文名--掌中时空,闹钟秒表世界时间键盘锁等等功能集一身,是个好软件)但因为软件的快捷键和音乐快捷键有冲突,会导致音乐快捷键失灵了。

此外,和智能影院有冲突的是系统的_PAlbTN这个文件,当然只要把avi的文件放在一个自建的目录里就行了,但一定要记得不要把3gp的文件也放进去哟~~!

还有就是电话精灵和X-plore资源管理器也有冲突,其现象是电话精灵原来运行正常,装上X-plore资源管理器后机器运行相当的慢,接收彩信也出奇的慢,需要好几分钟。电话精灵也不能正常工作。有时导致白屏、死机。

等等

5)、尽可能不装字体软件

就用手机自带的字体好了,太花哨了有什么用?因为大部分字体会造成系统不稳定--重启,死机等,对系统界面或一些软件不兼容--有些字无法显示变成 □□,使用数据线传输的时候会显示--无法启动数据线传输模式需要拔内存卡--接线--插卡--麻烦。再说,和上网也冲突,你要上网前,还得设回手机自带的字体,个人觉得烦~~!

6)、主题也不要太五彩缤纷了,主题程序越小越好

尽量不要使用太花哨的主题,在手机看起来与众不同和 *** 作顺畅两者之间,我们当然选择后者。这里说的太花哨题是指几百K仍至1~2M的主题,因为它们都替换了原主题的图标什么,这么大的主题会造成 *** 作延迟,像在待机模式下按左功能键 键开键盘锁会停顿一下才亮键盘灯进入功能表要等一会等等情形。所以建议主题程序以100K以下的为好,且最好多用黑色背景的主题,既省电,尺寸又小。更不要装很多主题在卡上,看起来更换方便,但每个主题程序都会在C盘上留有注册文件,你删除主题后就产生垃圾文件了!!!

7)、尽量不要安装什么屏保

理由么,简单,屏保软件都是耗电的祖宗。而且是开机一直在工作,什么时候和系统冲突了,你还不知道。

8)、要自签名的软件尽可能不用

呵呵,这一点要遭到很多人的反对了!毕竟第三版软件的版权自我保护是很强的,一些自签名软件毕竟是以破解方式出现的,是不是会有些冲突,本人是有所怀疑,几个软件都发现这种现象,不过我可不敢没证据地乱说,还在测试中

手机使用IMEI和IMSI登录到GSM中国络的,由GSM中国络侧负责将IMSI和映射成手机号(MSISDN),以及执行相反方向的映射。 (一)、SIM card 号的修改: SIM card号就是印制在SIM上的一串数字。 读SIM card号的AT命令为:AT+CRSM=176,12258,0,0,10 因此在andorid模拟其源码中找到该AT命令——在sim_cardc中: const char asimcard_io( ASimCard sim, const char cmd ) { int nn; #if ENABLE_DYNAMIC_RECORDS int 中国mand, id, p1, p2, p3; #endif static const struct { const char cmd; const char answer; } answers[] = { { "+CRSM=192,28436,0,0,15", "+CRSM: 144,0,000000146f1404001aa0aa01020000" }, { "+CRSM=176,28436,0,0,20", "+CRSM: 144,0,416e64726f6964ffffffffffffffffffffffffff" }, { "+CRSM=192,28433,0,0,15", "+CRSM: 144,0,000000016f11040011a0aa01020000" }, { "+CRSM=176,28433,0,0,1", "+CRSM: 144,0,55" }, { "+CRSM=192,12258,0,0,15", "+CRSM: 144,0,0000000a2fe204000fa0aa01020000" }, { "+CRSM=176,12258,0,0,10", "+CRSM: 144,0,98101430121181157002" }, 因此用UE二进制方式打开emulator-armexe 或 emulator-x86exe,并搜索字符串“98101430121181157002”,然后将其修改成需要的SIM card号。 比如: 00209a00h: 31 30 00 00 2B 43 52 53 4D 3A 20 31 34 34 2C 30 ; 10+CRSM: 144,0 00209a10h: 2C 39 38 31 30 31 34 33 30 31 32 31 31 38 31 31 ; ,981014301211811 00209a20h: 35 37 30 30 32 00 2B 43 52 53 4D 3D 31 39 32 2C ; 57002+CRSM=192, (二)、IMEI、IMSI号的修改: Java代码中获取手机的IMEI号与ISMI号途径为: TelephonyManager manager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); String imei = managergetDeviceId(); String imsi = managergetSubscriberId(); 在android的源码树中找到类TelephonyManager的实现: 成员函数getDeviceId: / Returns the unique device ID, for example, the IMEI for GSM and the MEID or ESN for CDMA phones Return null if device ID is not available Requires Permission: {@link androidManifestpermission#READ_PHONE_STATE READ_PHONE_STATE} / public String getDeviceId() { try { return getSubscriberInfo()getDeviceId(); } catch (RemoteException ex) { return null; } catch (NullPointerException ex) { return null; } } 成员函数getSubscriberId: / Returns the unique subscriber ID, for example, the IMSI for a GSM phone Return null if it is unavailable Requires Permission: {@link androidManifestpermission#READ_PHONE_STATE READ_PHONE_STATE} / public String getSubscriberId() { try { return getSubscriberInfo()getSubscriberId(); } catch (RemoteException ex) { return null; } catch (NullPointerException ex) { // This could happen before phone restarts due to crashing return null; } } 上面两个成员函数最终调用共同的一个私有成员函数getSubscriberInfo(): private IPhoneSubInfo getSubscriberInfo() { // get it each time because that process crashes a lot return IPhoneSubInfoStubasInterface(ServiceManagergetService("iphonesubinfo")); } 而上面私有函数getSubscriberInfo获取的手机IMSI和IMEI号被硬编码在文件android_modemc中: / the Android GSM stack checks that the operator's name has changed when roaming is on If not, it will not update the Roaming status icon this means that we need to emulate two distinct operators: - the first one for the 'home' registration state, must also correspond to the emulated user's IMEI - the second one for the 'roaming' registration state, must have a different name and MCC/MNC / #define OPERATOR_HOME_INDEX 0 #define OPERATOR_HOME_MCC 310 #define OPERATOR_HOME_MNC 260 #define OPERATOR_HOME_NAME "Android" #define OPERATOR_HOME_MCCMNC STRINGIFY(OPERATOR_HOME_MCC) \ STRINGIFY(OPERATOR_HOME_MNC) #define OPERATOR_ROAMING_INDEX 1 #define OPERATOR_ROAMING_MCC 310 #define OPERATOR_ROAMING_MNC 295 #define OPERATOR_ROAMING_NAME "TelKila" #define OPERATOR_ROAMING_MCCMNC STRINGIFY(OPERATOR_ROAMING_MCC) \ STRINGIFY(OPERATOR_ROAMING_MNC) / a function used to deal with a non-trivial request / typedef const char (ResponseHandler)(const char cmd, AModem modem); static const struct { const char cmd; / 中国mand 中国ing from libreference-rilso, if first character is '!', then the rest is a prefix only / const char answer; / default answer, NULL if needs specific handling or if OK is good enough / ResponseHandler handler; / specific handler, ignored if 'answer' is not NULL, NULL if OK is good enough / } sDefaultResponses[] = { / see onRadioPowerOn() / { "%CPHS=1", NULL, NULL }, { "%CTZV=1", NULL, NULL }, { "!+VTS=", NULL, handleSetDialTone }, { "+CIMI", OPERATOR_HOME_MCCMNC "000000000", NULL }, / request internation subscriber identification number / { "+CGSN", "000000000000000", NULL }, / request model version / { "+CUSD=2",NULL, NULL }, / Cancel USSD / / end of list / {NULL, NULL, NULL} }; 因此用UE二进制方式打开emulator-armexe 或 emulator-x86exe,并搜索字符串"+CGSN"修改为需要的IMEI号;搜索"+CIMI"修改为需要的IMSI号。需要注意的是 IMSI 号的头六个数字"310260"不能修改,否则模拟器无法与中国络连接。 例如: 001fc700h: 33 00 41 00 48 00 21 2B 56 54 53 3D 00 2B 43 49 ; 3AH!+VTS=+CI 001fc710h: 4D 49 00 33 31 30 32 36 30 30 30 30 30 30 30 30 ; MI3102600000000 001fc720h: 30 30 00 2B 43 47 53 4E 00 30 30 30 30 30 30 30 ; 00+CGSN0000000 001fc730h: 30 30 30 30 30 30 30 30 00 2B 43 55 53 44 3D 32 ; 00000000+CUSD=2

有很多场景和需求你需要用到手机设备的唯一标识符。例如,略。

在Android中,有以下几种方法获取这样的ID。

1 The IMEI: 仅仅只对Android手机有效:

TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);

String szImei = TelephonyMgrgetDeviceId(); // Requires READ_PHONE_STATE

采用此种方法,需要在AndroidManifestxml中加入一个许可:androidpermissionREAD_PHONE_STATE,并且用户应当允许安装此应用。作为手机来讲,IMEI是唯一的,它应该类似于 359881030314356(除非你有一个没有量产的手机(水货)它可能有无效的IMEI,如:0000000000000)。

2 Pseudo-Unique ID, 这个在任何Android手机中都有效

有一些特殊的情况,一些如平板电脑的设置没有通话功能,或者你不愿加入READ_PHONE_STATE许可。而你仍然想获得唯一序列号之类的东西。这时你可以通过取出ROM版本、制造商、CPU型号、以及其他硬件信息来实现这一点。这样计算出来的ID不是唯一的(因为如果两个手机应用了同样的硬件以及Rom 镜像)。但应当明白的是,出现类似情况的可能性基本可以忽略。要实现这一点,你可以使用Build类:

String m_szDevIDShort = "35" + //we make this look like a valid IMEI

BuildBOARDlength()%10+ BuildBRANDlength()%10 + BuildCPU_ABIlength()%10 + BuildDEVICElength()%10 + BuildDISPLAYlength()%10 + BuildHOSTlength()%10 + BuildIDlength()%10 + BuildMANUFACTURERlength()%10 + BuildMODELlength()%10 + BuildPRODUCTlength()%10 + BuildTAGSlength()%10 + BuildTYPElength()%10 + BuildUSERlength()%10 ; //13 digits

大多数的Build成员都是字符串形式的,我们只取他们的长度信息。我们取到13个数字,并在前面加上“35”。这样这个ID看起来就和15位IMEI一样了。

3 The Android ID , 通常被认为不可信,因为它有时为null。开发文档中说明了:这个ID会改变如果进行了出厂设置。并且,如果某个Andorid手机被Root过的话,这个ID也可以被任意改变。

String m_szAndroidID = SecuregetString(getContentResolver(), SecureANDROID_ID);

Returns: 9774d56d682e549c 无需任何许可。

4 The WLAN MAC Address string, 是另一个唯一ID。但是你需要为你的工程加入androidpermissionACCESS_WIFI_STATE 权限,否则这个地址会为null。

WifiManager wm = (WifiManager)getSystemService(ContextWIFI_SERVICE);

String m_szWLANMAC = wmgetConnectionInfo()getMacAddress();

Returns: 00:11:22:33:44:55 (这不是一个真实的地址。而且这个地址能轻易地被伪造。)WLan不必打开,就可读取些值。

5 The BT MAC Address string, 只在有蓝牙的设备上运行。并且要加入androidpermissionBLUETOOTH 权限

BluetoothAdapter m_BluetoothAdapter = null; // Local Bluetooth adapter

m_BluetoothAdapter = BluetoothAdaptergetDefaultAdapter();

String m_szBTMAC = m_BluetoothAdaptergetAddress();

Returns: 43:25:78:50:93:38 蓝牙没有必要打开,也能读取。

Combined Device ID

综上所述,我们一共有五种方式取得设备的唯一标识。它们中的一些可能会返回null,或者由于硬件缺失、权限问题等获取失败。

但你总能获得至少一个能用。所以,最好的方法就是通过拼接,或者拼接后的计算出的MD5值来产生一个结果。

String m_szLongID = m_szImei + m_szDevIDShort

+ m_szAndroidID+ m_szWLANMAC + m_szBTMAC;

// compute md5

MessageDigest m = null;

try {

m = MessageDigestgetInstance("MD5");

} catch (NoSuchAlgorithmException e) {

eprintStackTrace();

}

mupdate(m_szLongIDgetBytes(),0,m_szLongIDlength());

// get md5 bytes

byte p_md5Data[] = mdigest();

// create a hex string

String m_szUniqueID = new String();

for (int i=0;i<p_md5Datalength;i++) {

int b = (0xFF & p_md5Data[i]);

// if it is a single digit, make sure it have 0 in front (proper padding)

if (b <= 0xF)

m_szUniqueID+="0";

// add number to string

m_szUniqueID+=IntegertoHexString(b);

} // hex string to uppercase

m_szUniqueID = m_szUniqueIDtoUpperCase();

通过以上算法,可产生32位的16进制数据:

9DDDF85AFF0A87974CE4541BD94D5F55

现在你就可以对其进行你的应用了。

好像不支持获取sim卡号,楼上的方法获取到的是手机序列号,就是你在手机上输入#06#获取到的,有时候还会返回null

补充————————————

不是不涉及底层,我的理解是SIM卡是运营商的,可能做了某些限制,或者加密之类的,总之他不会让你那么轻易的读取到SIM卡的ID之类的东西,如果可以直接读取那么复制卡就简单了,这样对运营商就很不利

以上就是关于android 代码获取IMEI,IMSI都为空,怎么解决全部的内容,包括:android 代码获取IMEI,IMSI都为空,怎么解决、如何修改android模拟器上的IMEI,IMSI,SIM card serial number、手机JAVA问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9604537.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存