How to check user entered own phone number in EditText?

前端 未结 5 656
醉酒成梦
醉酒成梦 2021-02-08 10:26

Mobile number will be entered in an edittext by user on registration page in my Android application. How can I check that user entered his/her mobile number not other\'s ?

5条回答
  •  一生所求
    2021-02-08 10:45

    I solved it my self. Here is my working code. MainActivity Class :

       public class MainActivity extends Activity
    {    
        Button submit;
        EditText contact;
        static String phNo;
        ProgressDialog progress;
        static Boolean wasMyOwnNumber;
        static Boolean workDone;
        final static int SMS_ROUNDTRIP_TIMOUT = 30000;
    
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            contact = (EditText)findViewById(R.id.mobileNumber);
            submit = (Button) findViewById(R.id.button1);
            wasMyOwnNumber = false;
            workDone = false;
            submit.setOnClickListener(new OnClickListener()
            {
                    public void onClick(View v)
                    {
                        phNo = contact.getText().toString();
                        new CheckOwnMobileNumber().execute();
                    }
            });
        }
    
        private class CheckOwnMobileNumber extends AsyncTask
        {
            @Override
            protected void onPostExecute(String result)
            {
                // TODO Auto-generated method stub
                if(progress.isShowing())
                {
                    progress.dismiss();
                    if(wasMyOwnNumber)
                    {
                        Toast.makeText(getApplicationContext(), "Number matched.", Toast.LENGTH_LONG).show();
                        wasMyOwnNumber = false;
                        workDone = false;
                    }
                    else
                    {
                        Toast.makeText(getApplicationContext(), "Wrong number.", Toast.LENGTH_LONG).show();
                        wasMyOwnNumber = false;
                        workDone = false;
                        return;
                    }
                }
                super.onPostExecute(result);
            }
    
            @Override
            protected String doInBackground(String... params)
            {
                // TODO Auto-generated method stub
                String msg = phNo;
                try
                {
                    SmsManager sms = SmsManager.getDefault();
                    sms.sendTextMessage(phNo, null, msg, null, null);
                    timeout();
                }
                catch(Exception ex)
                {
                    Log.v("Exception :", ""+ex);
                }
                return null;
            }
    
            @Override
            protected void onPreExecute() 
            {
                // TODO Auto-generated method stub
                progress = ProgressDialog.show(MainActivity.this, "","Checking Mobile Number...");
                progress.setIndeterminate(true);
                progress.getWindow().setLayout(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
                super.onPreExecute();
            }
        }
    
        private boolean timeout()
        {
               int waited = 0;
               while (waited < SMS_ROUNDTRIP_TIMOUT)
               {
                  try
                  {
                    Thread.sleep(100);
                  }
                  catch (InterruptedException e)
                  {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                  }
                  waited += 100;
                  if(phoneNumberConfirmationReceived())
                  {
                      waited=SMS_ROUNDTRIP_TIMOUT;
                      workDone = true;
                  }
               }
               /*Log.v("MainActivity:timeout2: Waited: " , ""+waited);
               Log.v("MainActivity:timeout2:Comparision: ", ""+ phoneNumberConfirmationReceived());
               Log.v("MainActivity:timeout2: WorkDone value after wait complete : ", ""+workDone);*/
            return workDone;
        }
    
        private boolean phoneNumberConfirmationReceived()
        {
            if(wasMyOwnNumber)
            {
                workDone = true;
            }
            return workDone;
        }
    }
    

    SMSReceiver Code :

     public class SMSReceiver extends BroadcastReceiver
    {
        private static final String ACTION_SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
        Context mContext;
        private Intent mIntent;
        static String address, str = null;
        boolean isSame;
    
        // Retrieve SMS
        public void onReceive(Context context, Intent intent)
        {
            mContext = context;
            mIntent = intent;
            String action = intent.getAction();
            if(action.equals(ACTION_SMS_RECEIVED))
            {
                SmsMessage[] msgs = getMessagesFromIntent(mIntent);
                if (msgs != null)
                {
                    for (int i = 0; i < msgs.length; i++)
                    {
                        address = msgs[i].getOriginatingAddress();
                        str = msgs[i].getMessageBody().toString();
                    }
                }
                Log.v("Originating Address : Sender :", ""+address);
                Log.v("Message from sender :", ""+str);
                isSame = PhoneNumberUtils.compare(str, MainActivity.phNo);
                Log.v("Comparison :", "Yes this true. "+isSame);
                if(isSame)
                {
                     MainActivity.wasMyOwnNumber = isSame;
                     MainActivity.workDone=true;
                }
    
                // ---send a broadcast intent to update the SMS received in the
                // activity---
                Intent broadcastIntent = new Intent();
                broadcastIntent.setAction("SMS_RECEIVED_ACTION");
                broadcastIntent.putExtra("sms", str);
                context.sendBroadcast(broadcastIntent);
            }
        }
    
        public static SmsMessage[] getMessagesFromIntent(Intent intent)
        {
            Object[] messages = (Object[]) intent.getSerializableExtra("pdus");
            byte[][] pduObjs = new byte[messages.length][];
    
            for (int i = 0; i < messages.length; i++)
            {
                pduObjs[i] = (byte[]) messages[i];
            }
    
            byte[][] pdus = new byte[pduObjs.length][];
            int pduCount = pdus.length;
            SmsMessage[] msgs = new SmsMessage[pduCount];
            for (int i = 0; i < pduCount; i++)
            {
                pdus[i] = pduObjs[i];
                msgs[i] = SmsMessage.createFromPdu(pdus[i]);
            }
            return msgs;
        }
    }
    

    No ANR found.

提交回复
热议问题