Androidの携帯電話番号の取得方法


最近一つのプロジェクトをするには、携帯番号を取得する必要があります。プロジェクトで使う携帯カードはテレコムカードです。これを例にしましょう。
ネット上ではニーズに合わない方法
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 
権限を追加:
<uss-permissionadroid: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("       :
"); address=message[i].getDisplayOriginatingAddress(); sb.append(address+"
"); 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, 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.以下の呼び出し:

// 
 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が携帯番号の実現コードを取得しました。必要な友達を助けたいです。ありがとうございます。