一般大多数android设备厂家都会对设备进行定制,这其中就包括dialer,这里面一般都是一些隐藏功能,比如工厂测试程序等。
这里以android4.3为基础,添加一个在拨号界面拨*#520#*字符串就能调出隐藏的程序。
在packages/apps/Dialer/src/com/android/dialer/SpecialCharSequenceMgr.java修改:
1.增加一个字符串定义
private static final String PRL_CLEAN_SD_DISPLAY = "*#520#*";
2.编写指定拨号序列过滤函数
static private boolean handleCleanSDDisplay(Context context, String input) {
if (input.equals(PRL_CLEAN_SD_DISPLAY)) {
try {
Intent intent = new Intent("android.intent.action.START_CleanSD");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
return true;
} catch (ActivityNotFoundException e) {
Log.d(TAG, "no activity to handle showing clean_sd test app.");
}
}
return false;
}
一旦检查到*#520#*拨号序列就会去发送一个为android.intent.action.START_CleanSD的Intent,他就会去启动这样的一个隐藏apk,否则就是打电话,其他什么都没发生。
至于这个Intent步骤4说明。
3.添加上述2步骤的过滤函数
static boolean handleChars(Context context, String input, boolean useSystemWindow,
EditText textField) {
//get rid of the separators so that the string gets parsed correctly
String dialString = PhoneNumberUtils.stripSeparators(input);
if (handlePRLVersion(context, dialString)
|| handleCitTestDisplay(context, dialString)
||handleDeviceVersionDisplay(context, dialString)/*指定拨号序列过滤且处理的函数*/
|| handleDeviceInfoDisplay(context, dialString)
|| handleModemTestDisplay(context, dialString)
|| handleIMEIDisplay(context, dialString, useSystemWindow)
|| handleRegulatoryInfoDisplay(context, dialString)
|| handlePinEntry(context, dialString)
|| handleAdnEntry(context, dialString, textField)
|| handleSecretCode(context, dialString)) {
return true;
}
return false;
}
4.设置被启动的apk
修改被启动的apk的AndroidManifest.xml,修改片段如下
<activity
android:name="com.seuic.cleansd.view.MainActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.START_CleanSD" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
其中intent-filter段的action android:name就是上述步骤2发送的Intent,这个action触发启动该apk,启动类型设置为android.intent.category.DEFAULT,表示这个apk是隐藏的,图标不可见。