Android 手机获取手机号实现方法

Android 手机获取手机号实现方法,第1张

概述最近做到一个项目,需要获取手机号。项目中使用的手机卡为电信卡,那么就以此为例吧。

最近做到一个项目,需要获取手机号。项目中使用的手机卡为电信卡,那么就以此为例吧。

网上不符合需求的方法

Google了一下,网上的做法如下:

//获取手机号码 TelephonyManager tm = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);  String deviceid = tm.getdeviceid();//获取智能设备唯一编号  String te1 = tm.getline1Number();//获取本机号码  String imei = tm.getSimserialNumber();//获得SIM卡的序号  String imsi = tm.getSubscriberID();//得到用户ID 

添加权限:

<uses-permissionandroID:nameuses-permissionandroID:name="androID.permission.READ_PHONE_STATE"/ 

以上做法有可能获取sim卡号,但是现在最起码在电信手机卡上获取不到。

原因好像、似乎是:

手机号码不是所有的都能获取。只是有一部分可以拿到。这个是由于移动运营商没有把手机号码的数据写入到sim卡中.SIM卡只有唯一的编号,供网络与设备识别那就是imsI号码,手机的信号也可以说是通过这个号码在网络中传递的,并不是手机号码。试想,你的SIM卡丢失后,补办一张新的会换号码吗?是不会的.就是因为在你的手机号码对应的imsI号 在移动运营商中被修改成新SIM卡的imsI号码。

那么我们怎么解决这个问题呢?

不好实现?一个原因搞定你:项目需要!!

查了下手机的基本信息那一栏里,也没有找到手机号,看来手机中似乎没有存储这手机号。那么我就只有使用变通的手法来获取手机号了。

就是给10001发送一个短信,找了一下,发个501查询套餐情况就可以。10001会给你个反馈信息,其中包含手机号码

那么我们发送短信,然后监听得到此短信,然后分解字符串那么就可以得到手机号了。

如果是联通或者移动应该也是有类似的情况。何况给他们发短信应该不会收费。。。O(∩_∩)O~

程序如何实现?

1.监听短信类

package com.example.smsmanager;  import androID.content.broadcastReceiver; import androID.content.Context; import androID.content.Intent; import androID.telephony.SmsMessage;  public class SMS_Receiver extends broadcastReceiver {   final String GetNumberAddress="10001";  @OverrIDe  public voID onReceive(Context context,Intent intent) {   // Todo auto-generated method stub   if(intent.getAction().equals("androID.provIDer.Telephony.SMS_RECEIVED")){        Object[] pdus=(Object[])intent.getExtras().get("pdus");    //不知道为什么明明只有一条消息,传过来的却是数组,也许是为了处理同时同分同秒同毫秒收到多条短信    //但这个概率有点小    SmsMessage[] message=new SmsMessage[pdus.length];    StringBuilder sb=new StringBuilder();    System.out.println("pdus长度"+pdus.length);    String address="";    for(int i=0;i<pdus.length;i++){     //虽然是循环,其实pdus长度一般都是1     message[i]=SmsMessage.createFromPdu((byte[])pdus[i]);     sb.append("接收到短信来自:\n");     address=message[i].getdisplayOriginatingAddress();     sb.append(address+"\n");     sb.append("内容:"+message[i].getdisplayMessageBody());    }    System.out.println(sb.toString());    if(SMscore.PhoneNumber==""&&address.equals(GetNumberAddress)){     SMscore.PhoneNumber=SMscore.getPhoneNumberFromSMSText(sb.toString());     Messagetools.ShowDialog(context,address);    }    Messagetools.ShowDialog(context,sb.toString().trim());    Messagetools.ShowDialog(context,SMscore.PhoneNumber);   }  }  } 

2.短信 *** 作类

package com.example.smsmanager;  import java.sql.Date; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern;  import androID.vIEw.VIEw; import androID.vIEw.VIEw.OnClickListener; import androID.content.broadcastReceiver; import androID.app.Activity; import androID.app.PendingIntent; import androID.content.Context; import androID.content.Intent; import androID.content.IntentFilter; import androID.telephony.SmsManager; import androID.util.Log; import androID.content.Contextwrapper;  public class SMscore {     public static String PhoneNumber="";   //==============Get Phone Number ==============================      //get the phone number from sms   public static String getPhoneNumberFromSMSText(String sms){        List<String> List=GetNumberInString(sms);    for(String str:List){     if(str.length()==11)      return str;    }    return "";   }   public static List<String> GetNumberInString(String str){    List<String> List=new ArrayList<String>();     String regex = "\d*";       Pattern p = Pattern.compile(regex);        Matcher m = p.matcher(str);        while (m.find()) {       if (!"".equals(m.group()))        List.add(m.group());        }       return List;   }      //===========================================================   //   //   //=============Send SMS================   public voID SendSMS(String number,String text,Context context){        PendingIntent pi = PendingIntent.getActivity(context,new Intent(context,context.getClass()),0);    SmsManager sms = SmsManager.getDefault();    sms.sendTextMessage(number,null,text,pi,null);    }      public voID SendSMS2(String number,Context context){    String SENT = "sms_sent";    String DEliVERED = "sms_delivered";    PendingIntent sentPI = PendingIntent.getActivity(context,new Intent(SENT),0);    PendingIntent deliveredPI = PendingIntent.getActivity(context,new Intent(DEliVERED),0); //   //   // //   registerReceiver(new broadcastReceiver(){ //     @OverrIDe //     public voID onReceive(Context context,Intent intent){ //      switch(getResultCode()) //      { //       case Activity.RESulT_OK: //        Log.i("====>","RESulT_OK"); //        System.out.println("RESulT_OK"); //        //        break; //       case Activity.RESulT_CANCELED: //        Log.i("=====>","RESulT_CANCELED"); //        break; //      } //     } //    },new IntentFilter(DEliVERED)); //   //        SmsManager smsm = SmsManager.getDefault();    smsm.sendTextMessage(number,sentPI,deliveredPI);   }      //===================================== }  

3.d出框 *** 作类

package com.example.smsmanager;  import androID.app.AlertDialog; import androID.app.AlertDialog.Builder; import androID.content.Context; import androID.content.DialogInterface; import androID.content.DialogInterface.OnClickListener;  public class Messagetools {  public static voID ShowDialog(Context context,String text){   AlertDialog.Builder builder = new Builder(context);    builder.setMessage(text);     builder.setTitle("提示");     builder.setPositivebutton("确认",new OnClickListener() {     @OverrIDe    public voID onClick(DialogInterface dialog,int which) {    dialog.dismiss();     dialog.dismiss();    }    });     builder.setNegativebutton("取消",int which) {    dialog.dismiss();    }    });     builder.create().show();  } } 

4.调用如下:

//  private static final String ACTION_SMS_SEND = "lab.sodino.sms.send";  private static final String ACTION_SMS_DEliVERY = "lab.sodino.sms.delivery";  private static final String ACTION_SMS_RECEIVER = "androID.provIDer.Telephony.SMS_RECEIVED";  
// 注册接收下行receiver   SMS_Receiver smsReceiver= new SMS_Receiver();   IntentFilter receiverFilter = new IntentFilter(ACTION_SMS_RECEIVER);   registerReceiver(smsReceiver,receiverFilter); //发送短信 SMscore smscore=new SMscore(); smscore.SendSMS2("10001","501",context); 

 运行结果:

我们可以得到了想要的手机号码了!

以上就是AndroID 获取手机号的实现代码,希望能帮助有需要的朋友,谢谢大家对本站的支持!

总结

以上是内存溢出为你收集整理的Android 手机获取手机号实现方法全部内容,希望文章能够帮你解决Android 手机获取手机号实现方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1148265.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存