zoukankan      html  css  js  c++  java
  • android 监控EditText的变化

    在玩android的时候,有时候需要这样的功能,在editText里输入字符,要实时的监控输入的内容,比如 我要获取手机的IMEI号码。最后要输入*#06#就可以获取到了。那这是如何做到呢?或者说Phone是如何实现这个功能的呢?

    这主要用到了TextWatcher接口。

    public class DialpadFragment extends Fragment
            implements View.OnClickListener,
            View.OnLongClickListener, View.OnKeyListener,
            AdapterView.OnItemClickListener, TextWatcher,
            PopupMenu.OnMenuItemClickListener,
            DialpadImageButton.OnPressedListener 

    这个类是拨号界面的类。可以看到它就实现了TextWatcher

    复制代码
     public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            mWasEmptyBeforeTextChange = TextUtils.isEmpty(s);
        }
    
        @Override
        public void onTextChanged(CharSequence input, int start, int before, int changeCount) {
            if (mWasEmptyBeforeTextChange != TextUtils.isEmpty(input)) {
                final Activity activity = getActivity();
                if (activity != null) {
                    activity.invalidateOptionsMenu();
                }
            }
    
            // DTMF Tones do not need to be played here any longer -
            // the DTMF dialer handles that functionality now.
        }
    
        @Override
        public void afterTextChanged(Editable input) {
            // When DTMF dialpad buttons are being pressed, we delay SpecialCharSequencMgr sequence,
            // since some of SpecialCharSequenceMgr's behavior is too abrupt for the "touch-down"
            // behavior.
            if (!mDigitsFilledByIntent &&
                    SpecialCharSequenceMgr.handleChars(getActivity(), input.toString(), mDigits)) {
                // A special sequence was entered, clear the digits
                mDigits.getText().clear();
            }
    
            if (isDigitsEmpty()) {
                mDigitsFilledByIntent = false;
                mDigits.setCursorVisible(false);
            }
    
            updateDialAndDeleteButtonEnabledState();
        }
    复制代码

    判断输入的内容就是这句SpecialCharSequenceMgr.handleChars(getActivity(), input.toString(), mDigits))

    进入了这里

    复制代码
    static boolean handleIMEIDisplay(Context context, String input, boolean useSystemWindow) {
            if (input.equals(MMI_IMEI_DISPLAY)) {
                int subscription = MSimTelephonyManager.getDefault().getPreferredVoiceSubscription();
                int phoneType;
                if (MSimTelephonyManager.getDefault().isMultiSimEnabled()) {
                    phoneType = ((MSimTelephonyManager)context.getSystemService(
                            Context.MSIM_TELEPHONY_SERVICE)).getCurrentPhoneType(subscription);
                } else {
                    phoneType = ((TelephonyManager)context.getSystemService(
                            Context.TELEPHONY_SERVICE)).getCurrentPhoneType();
                }
    
                if (phoneType == TelephonyManager.PHONE_TYPE_GSM) {
                    showIMEIPanel(context, useSystemWindow);
                    return true;
                } else if (phoneType == TelephonyManager.PHONE_TYPE_CDMA) {
                    showMEIDPanel(context, useSystemWindow);
                    return true;
                }
            }
    
            return false;
        }
    复制代码

    最后通过

            AlertDialog alert = new AlertDialog.Builder(context)
                    .setTitle(R.string.imei)
                    .setMessage(imeiStr)
                    .setPositiveButton(android.R.string.ok, null)
                    .setCancelable(false)
                    .show();

    显示出对话框了。

  • 相关阅读:
    交叉排序
    交叉排序
    数据结构实验之串三:KMP应用
    数据结构实验之串三:KMP应用
    数据结构实验之串一:KMP简单应用
    数据结构实验之串一:KMP简单应用
    走迷宫
    走迷宫
    走迷宫
    走迷宫
  • 原文地址:https://www.cnblogs.com/kevincode/p/3844714.html
Copyright © 2011-2022 走看看