我的安卓应用获取不到电话号码?

3
我正在尝试从我的Android应用程序中获取并显示我手机的电话号码,在模拟器中可以工作,但在真实设备(手机)上无法工作。
有人能告诉我原因吗?
以下是源代码:
AndroidMenuActivity.java
public class AndroidMenusActivity extends Activity {
   TextView txt;
   String mphone;

   @Override
   public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);

   txt = (TextView)findViewById(R.id.txtVw_phonenumber);

   TelephonyManager tmgr = 
             (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);

   mphone = tmgr.getLine1Number();

   txt.setText(mphone);

   System.out.println("*******************************"   + mphone);
   }   
}

AndroidManifest.xml

 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.androidhive.androidmenus"
  android:versionCode="1"
  android:versionName="1.0">
  <uses-sdk android:minSdkVersion="8" />


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

  <application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name=".AndroidMenusActivity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
 </application>
</manifest>

你的真实设备有SIM卡吗? - Lucifer
CDMA手机没有SIM卡。 - Prof. Falken
我正在使用GSM手机。 - Nakshatran
请查看此链接:http://stackoverflow.com/questions/9484753/telephonymanager-is-not-providing-phone-number-on-every-device/ - Praful Bhatnagar
这是一个重复的问题,与此相同:https://dev59.com/bnE95IYBdhLWcg3wDpgG? - Alpay
4个回答

1
TelephonyManager tmgr = (TelephonyManager)getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);

你能使用应用程序上下文进行检查吗?


在所有设备中获取空值。 - Developers Park

1

这个问题没有保证的解决方案,因为电话号码并不是所有SIM卡上都物理存储的,也不会从网络广播到手机。在一些需要进行实际地址验证的国家,只有在分配号码之后才会发生。电话号码的分配发生在网络上,并且可以在不更换SIM卡或设备的情况下更改(例如,这就是支持转网的方式)。我知道这很麻烦,但最好的解决方案很可能是要求用户输入他/她的电话号码一次并将其存储。请参见此处


0

只有在CDMA设备上才能获取电话号码。在GSM设备上,您将能够获取电话号码。

TelephonyManager telephone=(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
  String mPhoneNumber = telephone.getLine1Number();

电话号码的意思是我的SIM卡号码。 - Nakshatran

0
еңЁGSMжүӢжңәдёӯпјҢжҲ‘们е®һйҷ…дёҠж— жі•еҒҡеҲ°иҝҷдёҖзӮ№...дҪҶжҳҜжҲ‘们еҸҜд»ҘйҖҡиҝҮTelephonyManagerжүҫеҲ°зҪ‘з»ңдҝЎжҒҜпјҢе®ғдјҡиҝ”еӣһдёҖдёӘз©әеӯ—з¬ҰдёІпјҢеӣ дёәз”өиҜқеҸ·з ҒжІЎжңүеөҢе…ҘsimеҚЎеӯҳеӮЁеҷЁдёӯ...жӮЁеҸҜд»ҘжҸҗеҸ–simеҚЎзҡ„еәҸеҲ—еҸ·пјҢд»ҺиҖҢеҸҜд»Ҙжҳ е°„з”өиҜқеҸ·з ҒпјҢеҰӮжһңжӮЁжңүе…¶д»–иө„жәҗжқҘе®һзҺ°жӯӨзӣ®зҡ„гҖӮ
жӮЁеҸҜд»Ҙжү§иЎҢд»ҘдёӢж“ҚдҪң...
public String getSimSerialNumber ()

API level 1 中添加

需要权限:READ_PHONE_STATE

您还可以获取 SIM 提供商的MCC 和 MNC 代码

如果您有电信公司的链接,您可以非常容易地找到这个信息。


你能给我至少一个示例源代码来支持你的建议吗? - Nakshatran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接