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();

显示出对话框了。

你可能感兴趣的:(EditText)