Dialer拨号定制功能

一般大多数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是隐藏的,图标不可见。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值