1

以下のコードを使用して電話番号を取得しようとしていますが、

TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
phoneImei = tm.getDeviceId();
phoneNo = tm.getLine1Number();

しかし、それは私にnull値を返します。設定を確認したところ、電話番号は不明でした。ギャラクシーネクサスを使っています。どうすればこれを解決できますか?

4

7 に答える 7

10

これを試して :

  import android.app.Activity;  
  import android.content.Context;  
  import android.os.Bundle;  
  import android.telephony.TelephonyManager;  
  import android.util.Log;  
  import android.widget.Toast;  

  public class GetMyPhoneNoActivity extends Activity {  
   /** Called when the activity is first created. */  
   @Override  
   public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);          

    String number =getMyPhoneNO();  
    Toast.makeText(getApplicationContext(), "My Phone No is: "  
    +number, Toast.LENGTH_SHORT).show();  
    Log.v("Debug", number);          
   }  

private String getMyPhoneNO(){  
    TelephonyManager mTelephonyMgr;    
   mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);     

    String yourNumber = mTelephonyMgr.getLine1Number();  
 //return yourNumber;   
}       

}

あなたのマニフェストで:

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

これはかなりうまくいくでしょう。

于 2012-09-20T11:08:33.990 に答える
4

電話番号の代わりに、常に存在し、常に有効な値である SIM カードのシリアル番号を使用します。

   telephonyManager.getSimSerialNumber();

SIM シリアル番号は、少なくとも通信事業者内で一意です。だから組み合わせて

   telephonyManager.getNetworkOperator();

国内のサブスクライバーの一意の識別子が得られます。これと組み合わせて

  telephonyManager.getNetworkCountryIso();

サブスクライバーのグローバルに一意の識別子が得られます。

これが役立つことを願っています。

乾杯。

于 2012-09-20T11:54:59.723 に答える
3

これが私のコードです:

 import java.lang.reflect.Method;

 import android.app.NotificationManager;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.database.Cursor;
 import android.media.AudioManager;
 import android.os.Bundle;
 import android.telephony.TelephonyManager;

 import com.android.internal.telephony.ITelephony;

  public class BlockBlackListIncomingNumber extends BroadcastReceiver {
 private Context cont;
 private Transactions transactions;
 private ITelephony itelephony;;

 int i = 1;


    /* When any incoming calls come to our cellphone number */
@Override
public void onReceive(Context context, Intent intent)
            {
    transactions = new Transactions(context); 
                // Create an object of transaction class.
    this.cont = context; 
                 // Refer to current object of Context.
    Bundle extras = intent.getExtras(); 
                 // Getting Bundles in extras.
    String iNumber = extras.getString(TelephonyManager.EXTRA_INCOMING_NUMBER); 
                 // Getting Incoming Number by which call comes that’s why we used TelephoyManager.EXTRA_INCOMING_NUMBER. 

iNumber は着信番号になります。

于 2012-09-20T10:56:00.937 に答える
1

AndroidManifest.xml ファイルに次の権限を追加する必要があります

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
于 2012-09-20T10:45:22.443 に答える
0

AIDL を使用して ITelephony インターフェイスを実装してみる

于 2012-09-20T11:45:15.353 に答える
0

国によっては、コードを使用しても電話番号を取得できない場合があります

TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); phoneImei = tm.getDeviceId(); phoneNo = tm.getLine1Number();

ユーザーから入力を取得する必要があります。ただし、その番号を確認するには、マニフェスト ファイルに SMS の送信と SMS の受信のアクセス許可を含める必要があります。

送信者と受信者の番号と暗号化されたメッセージ (作成/コード化したもの) を検証に使用して、ユーザーの電話番号を検証できます。Whatsappはこのようにします。

于 2015-07-05T13:22:33.680 に答える
0

行番号を取得していない場合は、このコードを使用できます

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    List<SubscriptionInfo> _sb = SubscriptionManager.from(getApplicationContext()).getActiveSubscriptionInfoList();
                    for (int i = 1; i < _sb.size(); i++) {
                        SubscriptionInfo info = _sb.get(i);
                        Log.d("phone", "Mobile_number " + info.getNumber());

                    }
                }
于 2020-01-19T06:15:00.410 に答える