国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android 手機獲取手機號實現(xiàn)方法

2019-12-12 05:21:30
字體:
供稿:網(wǎng)友

最近做到一個項目,需要獲取手機號。項目中使用的手機卡為電信卡,那么就以此為例吧。

網(wǎng)上不符合需求的方法

Google了一下,網(wǎng)上的做法如下:

//獲取手機號碼 TelephonyManager tm = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);  String deviceid = tm.getDeviceId();//獲取智能設(shè)備唯一編號  String te1 = tm.getLine1Number();//獲取本機號碼  String imei = tm.getSimSerialNumber();//獲得SIM卡的序號  String imsi = tm.getSubscriberId();//得到用戶Id 

添加權(quán)限:

<uses-permissionandroid:nameuses-permissionandroid:name="android.permission.READ_PHONE_STATE"/ 

以上做法有可能獲取sim卡號,但是現(xiàn)在最起碼在電信手機卡上獲取不到。

原因好像、似乎是:

手機號碼不是所有的都能獲取。只是有一部分可以拿到。這個是由于移動運營商沒有把手機號碼的數(shù)據(jù)寫入到sim卡中.SIM卡只有唯一的編號,供網(wǎng)絡(luò)與設(shè)備識別那就是IMSI號碼,手機的信號也可以說是通過這個號碼在網(wǎng)絡(luò)中傳遞的,并不是手機號碼。試想,你的SIM卡丟失后,補辦一張新的會換號碼嗎?是不會的.就是因為在你的手機號碼對應(yīng)的IMSI號 在移動運營商中被修改成新SIM卡的IMSI號碼。

那么我們怎么解決這個問題呢?

不好實現(xiàn)?一個原因搞定你:項目需要!!

查了下手機的基本信息那一欄里,也沒有找到手機號,看來手機中似乎沒有存儲這手機號。那么我就只有使用變通的手法來獲取手機號了。

就是給10001發(fā)送一個短信,找了一下,發(fā)個501查詢套餐情況就可以。10001會給你個反饋信息,其中包含手機號碼

那么我們發(fā)送短信,然后監(jiān)聽得到此短信,然后分解字符串那么就可以得到手機號了。

如果是聯(lián)通或者移動應(yīng)該也是有類似的情況。何況給他們發(fā)短信應(yīng)該不會收費。。。O(∩_∩)O~

程序如何實現(xiàn)?

1.監(jiān)聽短信類

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");    //不知道為什么明明只有一條消息,傳過來的卻是數(shù)組,也許是為了處理同時同分同秒同毫秒收到多條短信    //但這個概率有點小    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++){     //雖然是循環(huán),其實pdus長度一般都是1     message[i]=SmsMessage.createFromPdu((byte[])pdus[i]);     sb.append("接收到短信來自:/n");     address=message[i].getDisplayOriginatingAddress();     sb.append(address+"/n");     sb.append("內(nèi)容:"+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 = "http://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, 0,      new Intent(context, context.getClass()), 0);    SmsManager sms = SmsManager.getDefault();    sms.sendTextMessage(number, null, text, pi, null);    }      public void SendSMS2(String number,String text,Context context){    String SENT = "sms_sent";    String DELIVERED = "sms_delivered";    PendingIntent sentPI = PendingIntent.getActivity(context, 0, new Intent(SENT), 0);    PendingIntent deliveredPI = PendingIntent.getActivity(context, 0, 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, null, text, sentPI, deliveredPI);   }      //===================================== }  

3.彈出框操作類

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("取消", new OnClickListener() {     @Override    public void onClick(DialogInterface dialog, int which) {    dialog.dismiss();    }    });     builder.create().show();  } } 

4.調(diào)用如下:

//  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); //發(fā)送短信 SMSCore smscore=new SMSCore(); smscore.SendSMS2("10001", "501", context); 

 運行結(jié)果:

我們可以得到了想要的手機號碼了!

以上就是Android 獲取手機號的實現(xiàn)代碼,希望能幫助有需要的朋友,謝謝大家對本站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 聊城市| 灵宝市| 衢州市| 绥化市| 阿城市| 海口市| 宜昌市| 霸州市| 隆安县| 如皋市| 怀宁县| 赣州市| 湟源县| 漳州市| 喜德县| 尼木县| 泸州市| 金乡县| 佛冈县| 宜宾县| 新建县| 新巴尔虎左旗| 通江县| 上栗县| 巴楚县| 进贤县| 湾仔区| 杨浦区| 陆川县| 邛崃市| 延安市| 定边县| 彭水| 花莲市| 延川县| 浦东新区| 丹阳市| 盐边县| 壶关县| 厦门市| 即墨市|