当前位置: 首页 > news >正文

泉州找工作网站家教补习中心网站建设

泉州找工作网站,家教补习中心网站建设,wordpress 投稿 加标签,wordpress链接跳转前言喜欢的小伙伴欢迎关注#xff0c;我会定期分享Android知识点及解析#xff0c;还会不断更新的BATJ面试专题#xff0c;欢迎大家前来探讨交流#xff0c;如有好的文章也欢迎投稿。什么是暗码#xff1f;在拨号盘中输入*#*##*#*后#xff0c;APP 可以监控到这些输入我会定期分享Android知识点及解析还会不断更新的BATJ面试专题欢迎大家前来探讨交流如有好的文章也欢迎投稿。什么是暗码在拨号盘中输入*#*##*#*后APP 可以监控到这些输入然后做相应的动作比如启动应用是不是有点骚。下面看下这个骚操作是如何实现的。效果预览源码DialtactsActivity#showDialpadFragmentDialtactsActivity 中有个 showDialpadFragment 方法用来加载显示拨号盘因此入口就从 showDialpadFragment 看起基于 Android P 分析。private void showDialpadFragment(boolean animate) {//……final FragmentTransaction ft  getFragmentManager().beginTransaction();if (dialpadFragment  null) {dialpadFragment  new DialpadFragment();ft.add(R.id.dialtacts_container, dialpadFragment, TAG_DIALPAD_FRAGMENT);} else {ft.show(dialpadFragment);}//……}具体实现在 DialpapFragment 中看到 DialpapFragment 实现了 TextWatcherTextWatcher 有 3 个重要方法分别为beforeTextChangedonTextChanged 和 afterTextChanged重点看 afterTextChanged 方法。DialpadFragment#afterTextChangedpublic class DialpadFragment extends Fragmentimplements View.OnClickListener,View.OnLongClickListener,View.OnKeyListener,AdapterView.OnItemClickListener,TextWatcher,PopupMenu.OnMenuItemClickListener,DialpadKeyButton.OnPressedListener {//……Overridepublic void afterTextChanged(Editable input) {// When DTMF dialpad buttons are being pressed, we delay SpecialCharSequenceMgr sequence,// since some of SpecialCharSequenceMgrs behavior is too abrupt for the touch-down// behavior.if (!digitsFilledByIntent SpecialCharSequenceMgr.handleChars(getActivity(), input.toString(), digits)) {// A special sequence was entered, clear the digitsdigits.getText().clear();}if (isDigitsEmpty()) {digitsFilledByIntent  false;digits.setCursorVisible(false);}if (dialpadQueryListener ! null) {dialpadQueryListener.onDialpadQueryChanged(digits.getText().toString());}updateDeleteButtonEnabledState();}//……}这里调用了 SpecialCharSequenceMgr 辅助工具类的 handleChars 方法看这个方法。SpecialCharSequenceMgr#handleCharspublic static boolean handleChars(Context context, String input, EditText textField) {// get rid of the separators so that the string gets parsed correctlyString dialString  PhoneNumberUtils.stripSeparators(input);if (handleDeviceIdDisplay(context, dialString)|| handleRegulatoryInfoDisplay(context, dialString)|| handlePinEntry(context, dialString)|| handleAdnEntry(context, dialString, textField)|| handleSecretCode(context, dialString)) {return true;}if (MotorolaUtils.handleSpecialCharSequence(context, input)) {return true;}return false;}handleChars 方法中会对各种特殊的 secret code 进行匹配处理这里我们看 handleSecretCode。SpecialCharSequenceMgr#handleSecretCodestatic boolean handleSecretCode(Context context, String input) {// Secret code specific to OEMs should be handled first.if (TranssionUtils.isTranssionSecretCode(input)) {TranssionUtils.handleTranssionSecretCode(context, input);return true;}// Secret codes are accessed by dialing *#*##*#* or *##if (input.length()  8  input.startsWith(*#*#)  input.endsWith(#*#*)) {String secretCode  input.substring(4, input.length() - 4);TelephonyManagerCompat.handleSecretCode(context, secretCode);return true;}return false;}再看下 TelephonyManagerCompat.handleSecretCode 方法。TelephonyManagerCompat#handleSecretCodepublic static void handleSecretCode(Context context, String secretCode) {// Must use system service on O to avoid using broadcasts, which are not allowed on O.if (BuildCompat.isAtLeastO()) {if (!TelecomUtil.isDefaultDialer(context)) {LogUtil.e(TelephonyManagerCompat.handleSecretCode,not default dialer, cannot send special code);return;}context.getSystemService(TelephonyManager.class).sendDialerSpecialCode(secretCode);} else {// System service call is not supported pre-O, so must use a broadcast for N-.Intent intent new Intent(SECRET_CODE_ACTION, Uri.parse(android_secret_code://  secretCode));context.sendBroadcast(intent);}}可以看到在拨号中接收到*#*##*#* 这样的指令时程序会对外发送广播这就意味着我们能够接收这个广播然后可以做我们想做的事情。接下来我们看看这个接受广播代码是怎么写。应用首先在 AndroidManifest 文件中注册广播接收器。android:name.SecretCodeReceiver接收广播启动应用。public class SecretCodeReceiver extends BroadcastReceiver {Overridepublic void onReceive(Context context, Intent intent) {if (intent ! null  SECRET_CODE_ACTION.equals(intent.getAction())){Intent i  new Intent(Intent.ACTION_MAIN);i.setClass(context, MainActivity.class);i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(i);}}}这样只要在拨号中输入*#*#1010#*#*就能启动相应的应用程序OK收功。觉得文章不错的小伙伴帮忙点点赞加关注哦 有什么问题的话也欢迎大家前来探讨交流。
http://wiki.neutronadmin.com/news/246455/

相关文章:

  • 如何做一个网站企业网站的推广形式有哪些
  • 广州专业网站建设哪家好怎么用手机网站做软件好
  • 网站怎么做登录界面友汇网站建设
  • wordpress站内搜索框东莞建设网招标信息
  • 网站备案回访电话号码wordpress 背景音乐
  • 外贸网站空间选择做网站用什么软件?
  • 注册建设网站的公司哪家好搜索电商怎么做
  • 域名注册后怎么建网站免费cms建站系统有哪些
  • 怎么用手机制作手机网站才艺多网站建设
  • phpmysql网站开发实例网页视频怎么下载ios
  • 网站做视频流量赚钱吗成都网站只
  • 网站开发创意设计免费单页在线制作
  • 网站建设开票单位页面设计怎么样
  • 一个网站费用谷歌官网网址
  • 机械类外贸网站建设新网官方网站
  • 外贸网站建设 广州可以做仿牌网站
  • 县区网站服务器机房建设网站建设主
  • 网站空间是啥免费空间凡科
  • 山东智能网站建设企业郑州网站定制外包
  • 建设网站的工作html网站开发相关书籍
  • 建设工程的招标网站有哪些酒店网站建设范文
  • 搭建网站开发网站环境书店网站建设人员分配
  • 爱站网工具3g小说网站
  • 济阳县做网站公司ftp修改wordpress密码
  • 网站建设常州青之峰云浮新增确诊病例
  • 手机电视直播网站大全淘宝代运营服务
  • 做电影网站要几G空间的电梯企业网站制作
  • 做网站放网站广告wordpress数据库链接不上
  • 人网站设计与制作微站是什么东西
  • 网站标签设计秦皇岛在线