精华内容
参与话题
问答
  • Android获取手机号码

    千次阅读 2019-04-04 11:24:06
    今天来说一下Android系统中怎么获取手机号 一、SIM卡存储的数据可分为四类,它们分别是: 第一类是固定存放的数据。这类数据在移动电话机被出售之前由SIM卡中心写入,包括国际移动用户识别号(IMSI)、鉴权密钥...

    今天来说一下Android系统中怎么获取手机号

     

    一、SIM卡存储的数据可分为四类,它们分别是:


    第一类是固定存放的数据。这类数据在移动电话机被出售之前由SIM卡中心写入,包括国际移动用户识别号(IMSI)、鉴权密钥(KI)、鉴权和加密算法等等。


    第二类是暂时存放的有关网络的数据。如位置区域识别码(LAI)、移动用户暂时识别码(TMSI)、禁止接入的公共电话网代码等。


    第三类是相关的业务代码,如个人识别码(PIN)、解锁码(PUK)、计费费率等。


    第四类是电话号码簿,是手机用户随时输入的电话号码。用户全部资料几乎都存储在SIM卡内,因此SIM卡又称为用户资料识别卡。


    IMSI是一个唯一的数字, 标识了GSM和UMTS 网络里的唯一一个用户. 它存储 在手机的SIM卡里,它会通过手机发送到网络上. IMSI 与 SIM唯一对应.


    IMEI也是一串唯一的数字, 标识了 GSM 和 UMTS网络里的唯一一个手机.它通常被打印在手机里电池下面的那一面,拨 *#06# 也能看到它. IMEI 与设备唯一对应.


    我们要注意以下几点:


    1.IMEI不存在于SIM卡中,它是手机本身的串号。 


    2.通常我们所说的手机号也不存在于SIM卡中,虽然SIM卡中有一个专门存储SIM卡本身号码的地方,但是此号码是通过手工设定的,而且是可以更改的。   SIM卡的识别通常使用IMSI号,这个对于SIM卡是唯一的。


    3.使用SimGetRecordInfo之类的函数获得SIM卡的IMSI号码能否成功依赖于设备制造商是否实现了此函数,据我所知在DOPOD的机器上是可以获得,但是在联想的机器上却不行,其他机器没有。


    4.获得IMEI以及IMSI可以通过RIL或者TAPI中的LINE操作的函数获得。


    二、下面给出获取手机本机号码及Sim卡状态的代码:

    TelephonyManager tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);       
    String deviceid = tm.getDeviceId();
    String tel = tm.getLine1Number();
    String  imei = tm.getSimSerialNumber();     
    String imsi = tm.getSubscriberId();
    String simState = tm.getSimState();


    三、添加权限:

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


    注意:手机号码不是所有的都能获取。只是有一部分可以拿到。这个是由于移动运营商没有把手机号码的数据写入到sim卡中。这个就像是一个变量,当移动运营商为它赋值了,它自然就会有值。不赋值自然为空。这就是为什么很多人得不到本机号码的原因。


    四、名词解释:


    IMEI:(International Mobile Equipment Identity)是国际移动设备身份码的缩写,国际移动装备辨识码,是由15位数字组成的"电子串号",它与每台手机一一对应,而且该码是全世界唯一的。每一只手机在组装完成后都将被赋予一个全球唯一的一组号码,这个号码从生产到交付使用都将被制造生产的厂商所记录。


    IMSI:(InternationalMobileSubscriberIdentificationNumber)国际移动用户识别码,是区别移动用户的标志,储存在SIM卡中,可用于区别移动用户的有效信息。其总长度不超过15位,同样使用0~9的数字。其中MCC是移动用户所属国家代号,占3位数字,中国的MCC规定为460;MNC是移动网号码,最多由两位数字组成,用于识别移动用户所归属的移动通信网;MSIN是移动用户识别码,用以识别某一移动通信网中的移动用户

    如有需要可以加我Q群【308742428】大家一起讨论技术。

    后面会不定时为大家更新文章,敬请期待。

    喜欢的朋友可以关注下。

    展开全文
  • 微信公众号如何获取手机号

    万次阅读 2019-09-04 10:29:42
    都知道微信公众号获取不到手机号,但是小程序可以。 今天大早晨老大死磕非要我公众号授权获取手机号。没办法我还是有其他方法解决。 第一步:服务号添加一个小程序,网上有很多小程序授权的代码。确定小程序可以...

    都知道微信公众号获取不到手机号,但是小程序可以。

    今天大早晨老大死磕非要我公众号授权获取到手机号。没办法我还是有其他方法解决。

    第一步:服务号添加一个小程序,网上有很多小程序授权的代码。确定小程序可以授权成功并且能获取到手机号

    第二部:服务号网页授权成功获取到open_id记录到用户表里面

    第三部:网页授权成功之后调用小程序,授权获取手机号

    第四部:小程序获取到手机号成功之后调回到网页

    这里就成功使用微信公众号获取到用户手机号

    h5跳转到小程序

    wx.miniProgram.navigateTo({url: '/pages/index/kjcgcon/kjcgcon'})

    如果要传值可以直接在url后面加参数
    wx.miniProgram.navigateTo({url: '/pages/scenic/scenic_detail/kjcg?uid='+uid})

    注意要添加js
    <script src='https://res.wx.qq.com/open/js/jweixin-1.3.0.js'></script>

    小程序跳转到的H5页面,

    <web-view src="https://zgl.seamo.cn/zglh5/kjzjlist1.html"></web-view>
    

    参考资料

    https://developers.weixin.qq.com/community/develop/doc/00006243d68f38dfea5639dcb56000

     

    展开全文
  • android手机获取手机号

    千次阅读 2019-06-26 09:03:40
    最近做到一个项目,需要获取手机号。项目中使用的手机卡为电信卡,那么就以此为例吧。 网上不符合需求的方法 Google了一下,网上的做法如下: //获取手机号码 TelephonyManagertm=(TelephonyManager)this....

    来源:http://www.cnblogs.com/android100/p/android-get-num.html

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

    网上不符合需求的方法

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

    1. //获取手机号码  
    2. TelephonyManager tm = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);  
    3.   String deviceid = tm.getDeviceId();//获取智能设备唯一编号  
    4.   String te1  = tm.getLine1Number();//获取本机号码  
    5.   String imei = tm.getSimSerialNumber();//获得SIM卡的序号  
    6.   String imsi = tm.getSubscriberId();//得到用户Id  

    添加权限: 

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

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

    原因好像、似乎是:

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

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

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

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

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

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

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

    程序如何实现?

     

    1.监听短信类 

    1. package com.example.smsmanager;  
    2.   
    3. import android.content.BroadcastReceiver;  
    4. import android.content.Context;  
    5. import android.content.Intent;  
    6. import android.telephony.SmsMessage;  
    7.   
    8. public class SMS_Receiver extends BroadcastReceiver {  
    9.   
    10.     final String GetNumberAddress="10001";  
    11.     @Override  
    12.     public void onReceive(Context context, Intent intent) {  
    13.         // TODO Auto-generated method stub  
    14.         if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){  
    15.               
    16.             Object[] pdus=(Object[])intent.getExtras().get("pdus");  
    17.             //不知道为什么明明只有一条消息,传过来的却是数组,也许是为了处理同时同分同秒同毫秒收到多条短信  
    18.             //但这个概率有点小  
    19.             SmsMessage[] message=new SmsMessage[pdus.length];  
    20.             StringBuilder sb=new StringBuilder();  
    21.             System.out.println("pdus长度"+pdus.length);  
    22.             String address="";  
    23.             for(int i=0;i<pdus.length;i++){  
    24.                 //虽然是循环,其实pdus长度一般都是1  
    25.                 message[i]=SmsMessage.createFromPdu((byte[])pdus[i]);  
    26.                 sb.append("接收到短信来自:\n");  
    27.                 address=message[i].getDisplayOriginatingAddress();  
    28.                 sb.append(address+"\n");  
    29.                 sb.append("内容:"+message[i].getDisplayMessageBody());  
    30.             }  
    31.             System.out.println(sb.toString());  
    32.             if(SMSCore.PhoneNumber==""&&address.equals(GetNumberAddress)){  
    33.                 SMSCore.PhoneNumber=SMSCore.GetPhoneNumberFromSMSText(sb.toString());  
    34.                 MessageTools.ShowDialog(context, address);  
    35.             }  
    36.             MessageTools.ShowDialog(context, sb.toString().trim());  
    37.             MessageTools.ShowDialog(context, SMSCore.PhoneNumber);  
    38.         }  
    39.     }  
    40.   
    41. }  



    2.短信操作类 

    1. package com.example.smsmanager;  
    2.   
    3. import java.sql.Date;  
    4. import java.util.ArrayList;  
    5. import java.util.List;  
    6. import java.util.regex.Matcher;  
    7. import java.util.regex.Pattern;  
    8.   
    9. import android.view.View;  
    10. import android.view.View.OnClickListener;  
    11. import android.content.BroadcastReceiver;  
    12. import android.app.Activity;  
    13. import android.app.PendingIntent;  
    14. import android.content.Context;  
    15. import android.content.Intent;  
    16. import android.content.IntentFilter;  
    17. import android.telephony.SmsManager;  
    18. import android.util.Log;  
    19. import android.content.ContextWrapper;  
    20.   
    21. public class SMSCore {  
    22.       
    23.         public static String PhoneNumber="";  
    24.         //==============Get Phone Number ==============================  
    25.           
    26.         //get the phone number from sms  
    27.         public static String GetPhoneNumberFromSMSText(String sms){  
    28.               
    29.             List<String> list=GetNumberInString(sms);  
    30.             for(String str:list){  
    31.                 if(str.length()==11)  
    32.                     return str;  
    33.             }  
    34.             return "";  
    35.         }  
    36.         public static List<String> GetNumberInString(String str){  
    37.             List<String> list=new ArrayList<String>();  
    38.                 String regex = "\\d*";  
    39.                         Pattern p = Pattern.compile(regex);  
    40.   
    41.                         Matcher m = p.matcher(str);  
    42.   
    43.                         while (m.find()) {  
    44.                         if (!"".equals(m.group()))  
    45.                          list.add(m.group());  
    46.                           }  
    47.                       return list;  
    48.         }  
    49.           
    50.         //===========================================================  
    51.         //  
    52.         //  
    53.         //=============Send SMS================  
    54.         public  void SendSMS(String number,String text,Context context){  
    55.                
    56.             PendingIntent pi = PendingIntent.getActivity(context, 0,  
    57.                     new Intent(context, context.getClass()), 0);  
    58.             SmsManager sms = SmsManager.getDefault();  
    59.             sms.sendTextMessage(number, null, text, pi, null);  
    60.   
    61.         }  
    62.           
    63.         public void SendSMS2(String number,String text,Context context){  
    64.             String SENT = "sms_sent";  
    65.             String DELIVERED = "sms_delivered";  
    66.             PendingIntent sentPI = PendingIntent.getActivity(context, 0, new Intent(SENT), 0);  
    67.             PendingIntent deliveredPI = PendingIntent.getActivity(context, 0, new Intent(DELIVERED), 0);  
    68. //            
    69. //          //  
    70. //           registerReceiver(new BroadcastReceiver(){  
    71. //                  @Override  
    72. //                  public void onReceive(Context context, Intent intent){  
    73. //                      switch(getResultCode())  
    74. //                      {  
    75. //                          case Activity.RESULT_OK:  
    76. //                              Log.i("====>", "RESULT_OK");  
    77. //                              System.out.println("RESULT_OK");  
    78. //                                
    79. //                              break;  
    80. //                          case Activity.RESULT_CANCELED:  
    81. //                              Log.i("=====>", "RESULT_CANCELED");  
    82. //                              break;  
    83. //                      }  
    84. //                  }  
    85. //              }, new IntentFilter(DELIVERED));  
    86. //            //  
    87.               
    88.             SmsManager smsm = SmsManager.getDefault();  
    89.             smsm.sendTextMessage(number, null, text, sentPI, deliveredPI);  
    90.         }  
    91.           
    92.         //=====================================  
    93. }  

     

    3.弹出框操作类 

    1. package com.example.smsmanager;  
    2.   
    3. import android.app.AlertDialog;  
    4. import android.app.AlertDialog.Builder;  
    5. import android.content.Context;  
    6. import android.content.DialogInterface;  
    7. import android.content.DialogInterface.OnClickListener;  
    8.   
    9. public class MessageTools {  
    10.     public static void ShowDialog(Context context, String text){  
    11.         AlertDialog.Builder builder = new Builder(context);  
    12.           builder.setMessage(text);  
    13.   
    14.           builder.setTitle("提示");  
    15.   
    16.           builder.setPositiveButton("确认", new OnClickListener() {  
    17.   
    18.            @Override  
    19.            public void onClick(DialogInterface dialog, int which) {  
    20.             dialog.dismiss();  
    21.   
    22.             dialog.dismiss();  
    23.            }  
    24.           });  
    25.   
    26.           builder.setNegativeButton("取消", new OnClickListener() {  
    27.   
    28.            @Override  
    29.            public void onClick(DialogInterface dialog, int which) {  
    30.             dialog.dismiss();  
    31.            }  
    32.           });  
    33.   
    34.           builder.create().show();  
    35.     }  
    36. }  


     

     

    4.调用如下: 

    1. //  
    2.     private static final String ACTION_SMS_SEND = "lab.sodino.sms.send";    
    3.     private static final String ACTION_SMS_DELIVERY = "lab.sodino.sms.delivery";    
    4.     private static final String ACTION_SMS_RECEIVER = "android.provider.Telephony.SMS_RECEIVED";  

     

    1. // 注册接收下行receiver    
    2.        SMS_Receiver smsReceiver= new SMS_Receiver();    
    3.        IntentFilter receiverFilter = new IntentFilter(ACTION_SMS_RECEIVER);    
    4.        registerReceiver(smsReceiver, receiverFilter);    
    5. //发送短信  
    6. SMSCore smscore=new SMSCore();  
    7. smscore.SendSMS2("10001", "501", context);  

     

    运行结果:

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

     

     

     

     

     

     

     

     

     

    ------------------------------------------------------------------------------------------------------------------------------------------------

     

     

     

     

     

     

     

     

    android 安卓APP获取手机设备信息和手机号码的代码示例

     

    下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码

     

    准备条件:一部安卓手机、手机SIM卡确保插入手机里、eclipse ADT和Android-sdk开发环境

     

    第一步:新建一个android工程(JinshanTest),

     

    并需要在工程的AndroidManifest.xml文件中,添加权限

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

     

    图例:

     

     

    第二步:新建一个工具类PhoneInfo.Java

     

    [java] view plain copy

     

     print?

    1. package com.jinshan.test;  
    2.   
    3.   
    4. import android.content.Context;  
    5. import android.telephony.TelephonyManager;  
    6.   
    7. /** 
    8.  * 读取手机设备信息测试代码 
    9.  * http://www.souapp.com 搜应用网  
    10.  * song2c@163.com 
    11.  * 宋立波 
    12.  */  
    13. public class PhoneInfo {  
    14.   
    15.     private TelephonyManager telephonyManager;  
    16.     /** 
    17.      * 国际移动用户识别码 
    18.      */  
    19.     private String IMSI;  
    20.     private Context cxt;  
    21.     public PhoneInfo(Context context) {  
    22.         cxt=context;  
    23.         telephonyManager = (TelephonyManager) context  
    24.                 .getSystemService(Context.TELEPHONY_SERVICE);  
    25.     }  
    26.   
    27.     /** 
    28.      * 获取电话号码 
    29.      */  
    30.     public String getNativePhoneNumber() {  
    31.         String NativePhoneNumber=null;  
    32.         NativePhoneNumber=telephonyManager.getLine1Number();  
    33.         return NativePhoneNumber;  
    34.     }  
    35.   
    36.     /** 
    37.      * 获取手机服务商信息 
    38.      */  
    39.     public String getProvidersName() {  
    40.         String ProvidersName = "N/A";  
    41.         try{  
    42.         IMSI = telephonyManager.getSubscriberId();  
    43.         // IMSI号前面3位460是国家,紧接着后面2位00 02是中国移动,01是中国联通,03是中国电信。  
    44.         System.out.println(IMSI);  
    45.         if (IMSI.startsWith("46000") || IMSI.startsWith("46002")) {  
    46.             ProvidersName = "中国移动";  
    47.         } else if (IMSI.startsWith("46001")) {  
    48.             ProvidersName = "中国联通";  
    49.         } else if (IMSI.startsWith("46003")) {  
    50.             ProvidersName = "中国电信";  
    51.         }  
    52.         }catch(Exception e){  
    53.             e.printStackTrace();  
    54.         }  
    55.         return ProvidersName;  
    56.     }  
    57.       
    58.     public String  getPhoneInfo(){  
    59.          TelephonyManager tm = (TelephonyManager)cxt.getSystemService(Context.TELEPHONY_SERVICE);  
    60.             StringBuilder sb = new StringBuilder();  
    61.   
    62.             sb.append("\nDeviceId(IMEI) = " + tm.getDeviceId());  
    63.             sb.append("\nDeviceSoftwareVersion = " + tm.getDeviceSoftwareVersion());  
    64.             sb.append("\nLine1Number = " + tm.getLine1Number());  
    65.             sb.append("\nNetworkCountryIso = " + tm.getNetworkCountryIso());  
    66.             sb.append("\nNetworkOperator = " + tm.getNetworkOperator());  
    67.             sb.append("\nNetworkOperatorName = " + tm.getNetworkOperatorName());  
    68.             sb.append("\nNetworkType = " + tm.getNetworkType());  
    69.             sb.append("\nPhoneType = " + tm.getPhoneType());  
    70.             sb.append("\nSimCountryIso = " + tm.getSimCountryIso());  
    71.             sb.append("\nSimOperator = " + tm.getSimOperator());  
    72.             sb.append("\nSimOperatorName = " + tm.getSimOperatorName());  
    73.             sb.append("\nSimSerialNumber = " + tm.getSimSerialNumber());  
    74.             sb.append("\nSimState = " + tm.getSimState());  
    75.             sb.append("\nSubscriberId(IMSI) = " + tm.getSubscriberId());  
    76.             sb.append("\nVoiceMailNumber = " + tm.getVoiceMailNumber());  
    77.            return  sb.toString();  
    78.     }  
    79. }  


     

     

    第三步:在启动的Activity,JinshanTestActivity中添加,调用代码:

     

    [java] view plain copy

     

     print?

    1. package com.jinshan.test;  
    2.   
    3. import android.app.Activity;  
    4. import android.os.Bundle;  
    5.   
    6. public class JinshanTestActivity extends Activity {  
    7.     /** Called when the activity is first created. */  
    8.     @Override  
    9.     public void onCreate(Bundle savedInstanceState) {  
    10.         super.onCreate(savedInstanceState);  
    11.         setContentView(R.layout.main);  
    12.           
    13.         PhoneInfo siminfo = new PhoneInfo(JinshanTestActivity.this);  
    14.         System.out.println("getProvidersName:"+siminfo.getProvidersName());  
    15.         System.out.println("getNativePhoneNumber:"+siminfo.getNativePhoneNumber());  
    16.         System.out.println("------------------------");  
    17.         System.out.println("getPhoneInfo:"+siminfo.getPhoneInfo());  
    18.     }  
    19.       
    20.       
    21.       
    22. }  


    第四步,把手机使用USB线,连接到电脑上,确保是连通性,开始运行工程

     

     

     

    最后,我们看LOGCAT日志,结果如下:

    ------------------------------------------------------------

    04-01 16:20:57.105: I/System.out(952): 460003121934674
    04-01 16:20:57.105: I/System.out(952): getProvidersName:中国移动
    04-01 16:20:57.115: I/System.out(952): getNativePhoneNumber:136XXXXXXX
    04-01 16:20:57.115: I/System.out(952): ------------------------
    04-01 16:20:57.145: I/System.out(952): getPhoneInfo:
    04-01 16:20:57.145: I/System.out(952): DeviceId(IMEI) = 352XXXXXXXX61328
    04-01 16:20:57.145: I/System.out(952): DeviceSoftwareVersion = 01
    04-01 16:20:57.145: I/System.out(952): Line1Number = 136XXXXXXX
    04-01 16:20:57.145: I/System.out(952): NetworkCountryIso = cn
    04-01 16:20:57.145: I/System.out(952): NetworkOperator = 46000
    04-01 16:20:57.145: I/System.out(952): NetworkOperatorName = 中国移动
    04-01 16:20:57.145: I/System.out(952): NetworkType = 2
    04-01 16:20:57.145: I/System.out(952): PhoneType = 1
    04-01 16:20:57.145: I/System.out(952): SimCountryIso = cn
    04-01 16:20:57.145: I/System.out(952): SimOperator = 46000
    04-01 16:20:57.145: I/System.out(952): SimOperatorName = CMCC
    04-01 16:20:57.145: I/System.out(952): SimSerialNumber = 898xxxxxx90108
    04-01 16:20:57.145: I/System.out(952): SimState = 5
    04-01 16:20:57.145: I/System.out(952): SubscriberId(IMSI) = 46000xxxxxxxx4674

    那么我们来解释一下上面的信息具体代表啥意思。

     

    getNativePhoneNumber 获取的手机号

    DeviceId(IMEI)手机  国际移动用户识别码

    NetworkOperator  移动运营商编号

    NetworkOperatorName  移动运营商名称

    SimSerialNumber  SimOperator  SimCountryIso  SimSerialNumber  SubscriberId(IMSI)   关于手机SIM卡的一些详细信息

     

    其实代码中没有写 获取System.ANDROID_ID这个操作,因为很多手机设备获取不到andnroid_id

     

    当然了,我们今天主要讲述<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 光使用这个权限我们可以获得的手机设备信息和手机号

    如果想获得WIFI,蓝牙,GPS,读写SDCARD更多的信息,就需要添加其它的权限。

     

    此外,本次测试我拿自己的手机SIM卡测试是可以获取到手机号码的,当然了有些手机号码是获取不到的,这里也给大家罗列了原因,

     

    手机号码不是所有的都能获取。只是有一部分可以拿到。

    这个是由于移动运营商没有把手机号码的数据写入到sim卡中.SIM卡只有唯一的编号,供网络与设备识别那就是IMSI号码,手机的信号也可以说是通过这个号码在网络中传递的,并不是手机号码。试想,你的SIM丢失后,补办一张新的会换号码吗?是不会的.就是因为在你的手机号码对应的IMSI号 在移动运营商中被修改成新SIM卡的IMSI号码。
      那么手机号为什么有的就能显示呢?
      这个就像是一个变量,当移动运营商为它赋值了,它自然就会有值。不赋值自然为空。
      对于移动的用户,手机号码(MDN)保存在运营商的服务器中,而不是保存在SIM卡里。SIM卡只保留了IMSI和一些验证信息。手机每次入网注册的时候,都会以短信的形式将IMSI及验证信息上传到运营商的服务器,服务器在完成注册动作之后,会以短信的形式将注册的结果下发到手机里。下发的内容会因条件不同而不同。
      如果服务器在下发的短信中,不包含手机的号码,手机是无法取得电话号码。如果短信中包含了号码,手机才会将其缓存,以备他用.此外,对于其他运行商的SIM卡或者UIM卡,MDN有可能保存在UIM卡中。100%能够取得本机号码不太可能。
      移动神州行,联通的卡是可以取到的.动感地带的取不到.别的卡还没有试过.
      能够读取SIM卡号的话应该有前提.那就是SIM卡已经写入了本机号码,不然是无法读取的。

    http://bbs.gfan.com/android-323295-1-1.html

    展开全文
  • 获取用户手机号码

    千次阅读 2018-05-31 14:02:51
    小程序中有很多地方都会用到注册用户信息的地方,用户需要填写手机号等, 有了这个组件可以快速获取微信绑定手机号码,无须用户填写。1.getPhoneNumber这个组件通过button来实现(别的标签无效)。将button中的open...

    小程序中有很多地方都会用到注册用户信息的地方,用户需要填写手机号等,

          有了这个组件可以快速获取微信绑定手机号码,无须用户填写。


    1.getPhoneNumber这个组件通过button来实现(别的标签无效)。将button中的open-type=“getPhoneNumber”,并且绑定bindgetphonenumber事件获取回调。

    [html] view plain copy
    1. <span style="font-size:14px;"><button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button></span>  

    2.在使用这个组件之前必须先调用login接口,如果没有调用login点击button时会提示先调用login。

    [html] view plain copy
    1. App({  
    2.     onLaunch: function () {  
    3.         wx.login({  
    4.             success: function (res) {  
    5.                 if (res.code) {  
    6.                     //发起网络请求  
    7.                     console.log(res.code)  
    8.                 } else {  
    9.                     console.log('获取用户登录态失败!' + res.errMsg)  
    10.                 }  
    11.             }  
    12.         });  
    13.     }  
    14. })  


    3.通过bindgetphonenumber绑定的事件来获取回调。回调的参数有三个,

    errMsg:用户点击取消或授权的信息回调。

    iv:加密算法的初始向量(如果用户没有同意授权则为undefined)。

    encryptedData: 用户信息的加密数据(如果用户没有同意授权同样返回undefined)


    [html] view plain copy
    1. getPhoneNumber: function(e) {   
    2.     console.log(e.detail.errMsg)   
    3.     console.log(e.detail.iv)   
    4.     console.log(e.detail.encryptedData)   
    5.     if (e.detail.errMsg == 'getPhoneNumber:fail user deny'){  
    6.       wx.showModal({  
    7.           title: '提示',  
    8.           showCancel: false,  
    9.           content: '未授权',  
    10.           success: function (res) { }  
    11.       })  
    12.     } else {  
    13.       wx.showModal({  
    14.           title: '提示',  
    15.           showCancel: false,  
    16.           content: '同意授权',  
    17.           success: function (res) { }  
    18.       })  
    19.     }  
    20.   }  
    4.最后我们需要根据自己的业务逻辑来进行处理,如果用户不同意授权的话可能我们会有一个让他手动输入的界面,如果不是强制获取手机号的话可以直接跳转页面进行下一步。(用户不同意授权errMsg返回‘getPhoneNumber:fail user deny’)

    5.用户同意授权,我们可以根据login时获取到的code来通过后台以及微信处理拿到session_key,最后通过app_id,session_key,iv,encryptedData(用户同意授权errMsg返回‘getPhoneNumber:ok’)

    6.解密的方法可以去微信官方开发文档查看,有很详细说明。
    展开全文
  • 小程序通过用户授权获取手机号之getPhoneNumber

    万次阅读 热门讨论 2018-06-07 11:47:43
    小程序有一个获取用户很便捷的api,就是通过getPhoneNumber获取用户的已经绑定微信的手机号码。有一点要大家注意,现在微信和注重用户体验,有些方法都是需要用户主动去触发才能调用的,比如getPhoneNumber。 实现...
  • Android 手机获取手机号实现方法

    千次阅读 2018-11-02 13:16:46
    Android 手机获取手机号实现方法 本文主要介绍Android 获取手机号的实现方法,这里提供了实现方法,和具体操作流程,并符实现代码,有需要的小伙伴可以参考下 最近做到一个项目,需要获取手机号。项目中使用的手机...
  • 微信小程序授权登录和获取手机号功能(详细)

    万次阅读 多人点赞 2019-04-20 18:06:43
    最近改了一个公司项目,新增加了一个获取用户手机号功能,里面用到了关于获取用户信息和用户手机号的功能,一开始写的时候发现我把两个按钮写在一个登录页面上,获取手机号逻辑是当用户点击授权之后跳转到首页,当...
  • 微信小程序 获取手机号 JS

    万次阅读 多人点赞 2020-03-31 09:17:14
    当我们在开发微信小程序中,有一个常用的功能,就是获取用户的手机号,然后一键登入小程序,那么手机号如何获取呢?请认真看完本文,保证可以获取到用户的手机号
  • Android 获取手机号码

    千次阅读 2018-06-13 14:16:25
    部分应用需要获取手机的号码,可以采用代码的方式来获取。代码如下:public String getNativePhoneNumber() { telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE); if ...
  • 微信小程序获取手机号,java后台

    万次阅读 热门讨论 2018-10-25 10:19:51
    获取小程序的手机号,指的是获取绑定用户微信的手机号码,细节什么的我就不多说了,官网说的很详细了 官网:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html 注意...
  • 微信小程序获取手机号码41003

    千次阅读 2019-10-30 17:33:12
    第一种情况 session_key 过期了,这个值是变化的,你去拿已经存起来的session_key 获取手机号码,会报41003错错误 解决方案:让前端传小程序code码。后台服务端重新请求小程序官方接口,拿最新的session_key。 ...
  • Android 手机获取手机号实现方法

    万次阅读 2017-02-14 10:33:05
    Android 手机获取手机号实现方法本文主要介绍Android 获取手机号的实现方法,这里提供了实现方法,和具体操作流程,并符实现代码,有需要的小伙伴可以参考下最近做到一个项目,需要获取手机号。项目中使用的手机卡为...
  • 在android2.3以下的系统中,可以使用如下的代码来获取Android系统的本地IP地址: private String getLocalIPAddress1() throws SocketException{   for(Enumeration en = NetworkInterface.getNetworkInterfaces...
  • http获取手机号码信息

    千次阅读 2018-11-28 20:21:46
    package ... import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View;...import android.wid...
  • 小程序获取手机号 thinkphp3.2.3

    千次阅读 2018-08-03 18:02:52
    //1、直接上代码php namespace Home\Controller; use Think\Controller; class ApiController extends Controller { /** * error code 说明. * <ul> * <li>-41001: encodingAesKey .../li>...
  • http://www.hehaibao.com/wechat-button-get-userinfo/微信小程序如何按钮授权获取用户信息 ... https://www.cnblogs.com/xyyt/p/9513467.html请求用户授权获取手机号码 https...
  • uni-app获取手机号

    千次阅读 2020-06-09 17:29:00
    uni-app获取手机号 在body中 <button @click="login">Login</button> <button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">getPhoneNumber</button> 在script中 login(e...
  • 微信小程序授权获取手机号

    千次阅读 2019-06-10 18:32:05
    微信小程序获取手机号官方文档链接: https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html wxml文件 点击事件: <button open-type="getPhoneNumber" ...
  • android 获取手机号

    千次阅读 2016-01-20 11:19:22
    最近做一个项目,需要取用户手机号,用代码取获取移动神州行的,返回null,但是取另外一个同事的联通WCDMA,可以获取到。很是纠结,想弄明白手机号码到底存放在什么地方,后来就去google了一下,很
  • 微信小程序-获取用户手机号码

    万次阅读 热门讨论 2019-09-16 15:01:56
    1、在获取手机号码之前,要先进行登陆。 ...2、使用type="getPhoneNumber"的button获取encryptedData,iv将这两个信息和session_key传给后台,通过解密返回正确的手机号码。 <button ope...

空空如也

1 2 3 4 5 ... 20
收藏数 226,451
精华内容 90,580
关键字:

获取手机号