免发激活短信

可能很多人把WIFI激活和免发激活短信弄混(包括我最开始也有弄混),实际上它们之间没有任何关系。

WIFI激活并不能免发激活国际短信,免发激活国际短信也不一定非要WIFI激活。

如果只是向上文中那样改成可WIFI激活,并不能免发激活短信。

那怎么才能免发激活短信呢?

最简单就是同时开启BYPASS_ACTIVATION和我们上篇中添加的WIFI_ACTIVATION选项。并在刷机时不要插卡(不插卡能不能成功激活Profile还不好说,反正我没成功过,不知是当时的网络问题还是不插卡就不能注册或登录Profile),或者插一张废卡(这个有人测试成功过),即可避免发激活短信了。

但上面的方法是有缺陷的,首先你不能用2G、3G这些传统的方法来注册或登录Profile了。然后就是进入系统之后,手势教程也是不能用的。BYPASS_ACTIVATION可能还会带来一些其它的副作用。所以,我们不推荐用上面的方法。

下面就来说一下本人发现的免发激活短信的方法。

虽然发现该方法费了好多工夫,但该方法在实现上却非常简单。在com.palm.app.firstuse的app/models/account-service.js文件中有一个方法:postLoginSettings。这个方法是发送激活短信的罪魁祸首。

它是在哪儿被调用的呢?

它在两处被调用。一处是在com.palm.app.firstuse的app/controllers/restorecomplete-assistant.js的restoreDone方法中被调用的。另一处是com.palm.app.firstuse的app/controllers/status-assistant.js的setup方法中被调用的。

restoreDone这个方法显然是在Profile被恢复的之后,按了完成按钮之后执行的。而status-assistant.js的情况稍微复杂一点。

但是不管是在哪儿被调用,他们都有一个共同点,就是这个方法不管是调用成功还是调用失败都不影响后续正常执行,因为它的成功回调和失败回调除了日志内容不同以外,其它的主要操作都是一模一样的。也就是说完全可以跳过这个方法的执行。

最简单的跳过方式当然就是直接修改postLoginSettings方法,而不是修改调用的地方。那该如何修改呢?最简单的方法就是把原来的对服务的调用注释掉,然后改为直接调用回调方法:

JavaScript代码
 
  1. postLoginSettings: function(AccountLocales, successCallback, errorCallback, sceneController) {  
  2.     /*return sceneController.serviceRequest(NovaAccountService.identifier, { 
  3.         method: 'postLoginSettings', 
  4.         parameters: {"firstTime": true, 'language':AccountLocales.language, 'country':AccountLocales.country}, 
  5.         onSuccess: successCallback, 
  6.         onFailure: errorCallback 
  7.     }, true);*/ successCallback({ "returnValue"true"errorCode": 0, "errorString""success"});  
  8. },  

 注意,这里我们没有增加行数,没有减少行数,为的是避免跟其它的补丁产生冲突。这样修改之后,对于restoreDone中的调用可以完美实现不发激活国际短信了。但是对于新注册或者原来的帐号没有备份的情况下,却会发生点击完成无限转圈圈的问题。这是什么原因呢?

仔细分析我们会发现,在status-assistant.js的setup最后有两行代码:

JavaScript代码
 
  1. this.postLoginRequestComplete = false;  
  2. this.provisioningRequestComplete = false;  

而在对postLoginSettings的回调方法中会将this.postLoginRequestComplete设置为true。并在最后的saveDoneState方法中对这两个标志检测是否都为true,只有都为true时才会保存设置并重启手机。

而上面的修改我们把正常的回调改成了直接调用回调方法,结果就是回调方法被提前执行了,之后又执行到setup底部时,this.postLoginRequestComplete又被重新设置为了false,导致这个标志永远都无法变成true,也就导致了无法重启,一直转圈圈了。

所以,我们应该把直接调用回调方法改成延迟回调,最简单的方法就是用setTimeout方法,下面是正确的修改:

JavaScript代码
 
  1. postLoginSettings: function(AccountLocales, successCallback, errorCallback, sceneController) {  
  2.     /*return sceneController.serviceRequest(NovaAccountService.identifier, { 
  3.         method: 'postLoginSettings', 
  4.         parameters: {"firstTime": true, 'language':AccountLocales.language, 'country':AccountLocales.country}, 
  5.         onSuccess: successCallback, 
  6.         onFailure: errorCallback 
  7.     }, true);*/setTimeout(function() {successCallback({ "returnValue"true"errorCode": 0, "errorString""success"});}, 3000);  
  8. },  

如此修改之后,便实现了完美的任何环境下激活都免发国际短信了。

我们可以把这个修改合并到前面的WIFI激活补丁中去,这样就可以直接用MetaDoctor来实现对ROM的完美修改了。

标签: Palm, WebOS, HP, ROM

« 上一篇 | 下一篇 »

只显示10条记录相关文章

发表评论

评论 (必须):