如何在真实设备上获取当前SIM卡的手机号码?

我必须做一个应用程序,显示单元中正在使用的SIM卡的联系电话号码。 为此,我需要使用TelephonyManager类。 我可以获得有关其使用的详细信息?

您可以使用TelephonyManager执行此操作:

 TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); String number = tm.getLine1Number(); 

getLine1Number()的文档说,如果这个数字是“不可用的”,这个方法将会返回null ,但是当这个数字不可用的时候它不会说。

您需要向您的应用程序授予进行此查询的权限,方法是在Manifest中添加以下内容:

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

(您不应该使用TelephonyManager.getDefault()来获取TelephonyManager因为这是一个私人的未公开API调用,将来可能会更改 。)

嗨其实这是我的同样的问题,但我没有得到任何东西。现在我从特定的Android真实设备(Android手机)获得手机号码和他的电子邮件Id。现在有90%的人使用Android手机上的应用程序的应用程序。现在我正在得到移动号码和电子邮件ID通过这个什么是应用API.Its非常简单的使用看到下面的代码。

  AccountManager am = AccountManager.get(this); Account[] accounts = am.getAccounts(); for (Account ac : accounts) { acname = ac.name; if (acname.startsWith("91")) { mobile_no = acname; }else if(acname.endsWith("@gmail.com")||acname.endsWith("@yahoo.com")||acname.endsWith("@hotmail.com")){ email = acname; } // Take your time to look at all available accounts Log.i("Accounts : ", "Accounts : " + acname); } 

并导入这个API

  import android.accounts.Account; import android.accounts.AccountManager; 

我必须做一个应用程序,显示单元中正在使用的SIM卡的联系电话号码。 为此我需要使用Telephony Manager类。 我可以获得有关其使用的详细信息?

是的,您必须使用电话pipe理器;如果根本没有find联系号码。 的用户; 您可以通过使用相同的电话pipe理器类获得Sim卡的SIM卡序列号和Android设备的Imei号…

添加权限:

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

import:

 import android.telephony.TelephonyManager; 

使用下面的代码:

 TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); // get IMEI imei = tm.getDeviceId(); // get SimSerialNumber simSerialNumber = tm.getSimSerialNumber(); 

那么,所有这些都可能是暂时的黑客,但是没有办法获得用户的手机号码。 这是违反道德的政策。

例如,上述答案中的一个build议获取所有账户并从那里提取。 而且它不工作了! 所有这些只是黑客。

只有获取用户手机号码的方法是通过运营商。 如果您与Aitel,Vodafone等移动运营商build立了合作关系,您可以在通过移动networking连接进行连接时,通过手机获取用户的手机号码。

不知道是否有任何制造商联合起来获得特定的权限可以帮助 – 没有探索这个领域,但没有logging至less。

有时您可以通过USSD请求向运营商索取电话号码。 例如,我可以通过拨打* 116#来获得我的电话号码。这可能可以在一个应用程序内完成,我想, 如果 USSD响应某种方式可能会被捕获。 OffCourse这不是我将推荐在要分发的应用程序中使用的一种方法,这些代码甚至可能在运营商之间有所不同。

很多人说:

 String phoneNumber = TelephonyManager.getDefault().getLine1Number(); 

可用性取决于运营商和号码在SIM卡上的编码方式。 如果是由制作SIM卡的公司或由移动运营商自己进行硬编码。 这返回与在设置 – >关于电话相同。