欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > Android 通过计算器暗码启动应用

Android 通过计算器暗码启动应用

2024/10/23 15:31:38 来源:https://blog.csdn.net/yesdehua/article/details/142958200  浏览:    关键词:Android 通过计算器暗码启动应用

项目不带通话功能,要求通过计算器输入暗码打开测试应用。

  • 查看布局文件 数字显示控件
    packages\apps\ExactCalculator\res\layout\display_one_line.xml
...<com.android.calculator2.CalculatorScrollViewandroid:id="@+id/formula_container"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="bottom"android:overScrollMode="never"android:scrollbars="none"><!--用户输入显示控件--><com.android.calculator2.CalculatorFormulaandroid:id="@+id/formula"style="@style/DisplayTextStyle.Formula"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_gravity="bottom|end"android:ellipsize="none"android:gravity="bottom|end"android:longClickable="true"android:singleLine="true"android:textColor="@color/display_formula_text_color"android:textIsSelectable="false" /></com.android.calculator2.CalculatorScrollView>
...
  • 自定义控件CalculatorFormula最终继承了TextView,并且重写了onTextChanged方法。

packages/apps/ExactCalculator/src/com/android/calculator2/CalculatorFormula.java

package com.android.calculator2;...
import android.content.Intent;///mh.modify /*** TextView adapted for displaying the formula and allowing pasting.*/
public class CalculatorFormula extends AlignedTextView implements MenuItem.OnMenuItemClickListener,ClipboardManager.OnPrimaryClipChangedListener {public static final String TAG_ACTION_MODE = "ACTION_MODE";...private Context mContext;///mh.modifypublic CalculatorFormula(Context context) {this(context, null /* attrs */);}public CalculatorFormula(Context context, AttributeSet attrs) {this(context, attrs, 0 /* defStyleAttr */);}//修改构造方法,context启动应用时需要public CalculatorFormula(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);mContext = context;//mh.modifymClipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CalculatorFormula, defStyleAttr, 0);mMaximumTextSize = a.getDimension(R.styleable.CalculatorFormula_maxTextSize, getTextSize());mMinimumTextSize = a.getDimension(R.styleable.CalculatorFormula_minTextSize, getTextSize());mStepTextSize = a.getDimension(R.styleable.CalculatorFormula_stepTextSize,(mMaximumTextSize - mMinimumTextSize) / 3);a.recycle();if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {setupActionMode();} else {setupContextMenu();}}...///mh.modify start 20190615private void handleSecretCode(Context context, String input) {android.util.Log.d("mh.log", "input:"+input);int len = input.length();if (len >= 8 && input.startsWith("!^!^") && input.endsWith("^!^!")) {Intent intent = new Intent();if("!^!^6,868^!^!".equals(input)) {intent.setClassName("com.xckj.factorytest", "com.xckj.factorytest.FactoryTestEntry");}if("!^!^3,646,633^!^!".equals(input)) {intent.setClassName("com.mediatek.engineermode", "com.mediatek.engineermode.EngineerMode");}try {intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(intent);}catch(Exception e){}}}///mh.modify end 20190615@Overrideprotected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {super.onTextChanged(text, start, lengthBefore, lengthAfter);setTextSize(TypedValue.COMPLEX_UNIT_PX, getVariableTextSize(text.toString()));handleSecretCode(mContext, text.toString());//调用}...

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com