无法从我的Android应用程序获取电话号码?

时间:2013-04-29 06:34:59

标签: android phone-number

我想从我的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>

4 个答案:

答案 0 :(得分:1)

此问题无法保证解决方案,因为电话号码并非物理存储在所有SIM卡上,也未从网络广播到手机。在一些需要物理地址验证的国家尤其如此,数字分配仅在事后发生。电话号码分配在网络上进行 - 并且可以在不更改SIM卡或设备的情况下进行更改(例如,这是支持移植的方式)。我知道这很痛苦,但最有可能最好的解决方案就是要求用户输入他/她的电话号码并保存。见here

答案 1 :(得分:1)

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

可以使用应用程序上下文检查吗?

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

在GSM手机中我们实际上无法做到这一点..但是我们可以通过 TelephonyManager 找到网络信息 它给出一个空字符串,因为电话号码没有嵌入到sim_card内存中。您可以提取sim_card 序列号,如果您有其他资源可以实现此目的,您可以从中映射电话号码。

您可以执行以下操作..

public String getSimSerialNumber ()

在API级别1中添加

需要权限:READ_PHONE_STATE

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

如果你有电信公司的链接,你可以想象出来......非常容易..