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>
4

4 回答 4

1

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

于 2013-04-29T06:46:01.813 回答
1
TelephonyManager tmgr = (TelephonyManager)getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);

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

于 2013-04-29T06:48:18.503 回答
0

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

TelephonyManager telephone=(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
  String mPhoneNumber = telephone.getLine1Number();
于 2013-04-29T06:38:16.607 回答
0

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

您可以执行以下操作..

public String getSimSerialNumber ()

在 API 级别 1 中添加

需要权限:READ_PHONE_STATE

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

如果您有电信公司的链接,您可以很容易地解决这个问题..

于 2013-04-29T06:56:49.687 回答