2013-04-29 87 views
3

我想从我的android应用程序中获取并显示我的手机的电话号码,它在模拟器中工作,但不在真实设备(手机)上。无法从我的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> 
+0

请问你的真实设备具有SIM卡? – Lucifer 2013-04-29 06:39:23

+0

是......... ofcourse – Nakshatran 2013-04-29 06:40:00

+0

CDMA手机没有SIM卡。 – 2013-04-29 06:51:46

回答

0

获取电话号码是唯一可能的CDMA设备上。在GSM设备上,您将能够获得电话号码。

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

是的,我需要只显示电话号码..如何? – Nakshatran 2013-04-29 06:39:17

+0

你有cdma设备吗?那么请参阅最新的答案。 – Rohit 2013-04-29 06:42:52

+0

电话号码=电话号码? – 2013-04-29 06:50:54

1

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

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

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

+0

没有它不显示任何 – Nakshatran 2013-04-29 06:50:49

+0

相同的结果.... – Nakshatran 2013-04-29 07:00:30

+0

得到所有设备的空值 – 2014-01-31 12:03:36

0

在GSM手机,我们却不能做这个事情。不过我们可以通过找到网络信息TelephonyManager 它给出了一个空字符串,因为电话号码是不是在sim_card内存包埋。您可以提取sim_card 序列号,如果您有其他资源可以实现此目的,则可以映射电话号码。

你可以做以下..

public String getSimSerialNumber() 

在API级别1

需要权限:READ_PHONE_STATE

,你也可以获取的MCC和MNC码 SIM的提供者。

如果你在电信运营商的链接,你可以算out..very容易..

+0

你可以给我一个atlest样品来源对你的建议 – Nakshatran 2013-04-29 06:59:56

+0

检查我编辑的答案.. – 2013-04-29 07:16:36