上一篇说到的是使用了发送广播启动暗码,还有一种就是在源码中修改代码。预置需要使用暗码启动的apk。可以是带源码预置或者不带源码预置,我测试的是没有使用带源码,直接预置的APK,再添加一个Android.mk。
如果直接预置apk,就不需要用到Receiver了,注册文件也不要写注册广播的代码。
1:
我们直接在源码中找到DialpadFragment.java
(路径:../packages/apps/Dialer/src/com/android/dialer/dialpad/DialpadFragment.java)
private void handleDialButtonPressed(int type) {
if (isDigitsEmpty()) { // No number entered.
handleDialButtonClickWithEmptyDigits();
} else {
final String number = mDigits.getText().toString();
/**
* modify
* *#666666*#
*/
+ if(number.compareTo("*#666666#*")==0){
Intent intent=new Intent(Intent.ACTION_MAIN);
intent.setClassName("com.example.testbg","com.example.testbg.MainActivity");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try{
startActivity(intent);
}catch(ActivityNotFoundExceptione){
Log.e(TAG, "startActivity() failed:"+e);
}
return;
}
//modify end
......
}
2:
或者在SpecialCharSequenceMgr.java
(路径:../packages/apps/Dialer/src/com/android/dialer/SpecialCharSequenceMgr.java)
添加代码:
+ private static final String MMI_TAG_DISPLAY="*#666666#";
+ private static boolean handleSwupDisplay(Context context, String input){
if (input.equals(MMI_SWUP_DISPLAY)) {
Intent swupintent=new Intent();
swupintent.setClassName("com.example.testbg","com.example.testbg.MainActivity");
swupintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try {
context.startActivity(swupintent);
} catch (ActivityNotFoundException e) {
Log.e(TAG, "startActivity() failed: " + e);
}
return true;
}
return false;
}
在handleChars中添加:handleSwupDisplay(context,dialString)
public static boolean handleChars(Context context, String input, EditText textField) {
/// M: for ALPS01692450 @{
// check null
if(context == null) {
return false;
}
/// @}
//get rid of the separators so that the string gets parsed correctly
String dialString = PhoneNumberUtils.stripSeparators(input);
if (handleDeviceIdDisplay(context, dialString)
|| handleRegulatoryInfoDisplay(context, dialString)
|| handlePinEntry(context, dialString)
|| handleAdnEntry(context, dialString, textField)
|| handleSecretCode(context, dialString)
+ || handleSwupDisplay(context,dialString)
......
}
上面两种添加方法都可以实现暗码启动该APK。
两者的区别可参考博客:http://blog.csdn.net/qq3162380/article/details/45393335