我必须制作一个应用程序,显示手机中正在使用的 SIM 卡的联系人号码。为此,我需要使用TelephonyManager
类。我可以得到它的使用细节吗?
6 回答
您可以使用来TelephonyManager
执行此操作:
TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String number = tm.getLine1Number();
的文档getLine1Number()
说如果号码“不可用”,此方法将返回null
,但没有说明号码何时可能不可用。
您需要通过将以下内容添加到您的清单中来授予您的应用程序进行此查询的权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
(您不应该使用它TelephonyManager.getDefault()
来获取它,TelephonyManager
因为它是一个未记录的私有 API 调用,并且将来可能会更改。)
嗨,实际上这是我的同一个问题,但我什么也没得到。现在我从特定的 Android 真实设备(Android Mobile)获得了手机号码和他的电子邮件 ID。现在一天 90% 的人在 Android Mobile 上使用什么是 App 应用程序。而且现在我通过这个 What's app API 获得手机号码和电子邮件 ID。它的使用非常简单,请参见下面的代码。
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 类。我能得到它的使用细节吗?
是的,您必须使用电话管理器;如果您根本没有找到联系人号码。用户的;您可以使用相同的电话管理器类获取 SIM 卡的 SIM 序列号和 Android 设备的 Imei 号...
添加权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
进口:
import android.telephony.TelephonyManager;
使用以下代码:
TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
// get IMEI
imei = tm.getDeviceId();
// get SimSerialNumber
simSerialNumber = tm.getSimSerialNumber();
好吧,所有这些都可能是临时黑客,但没有办法获得用户的手机号码。这是违反道德政策的。
例如,上面的答案之一建议获取所有帐户并从那里提取。而且它不再起作用了!所有这些都只是黑客。
获取用户手机号码的唯一方法是通过运营商。如果您与 Aitel、Vodafone 等移动运营商有合作,通过移动网络互联网连接时,您可以从手机的请求标头中获取用户的手机号码。
不确定是否有任何制造商为获得特定权限而联合起来可以提供帮助——没有探索过这个领域,但至少没有任何记录。
有时,您可以通过向运营商提出 USSD 请求来检索电话号码。例如,我可以通过拨打 *116# 来获取我的电话号码,我猜,如果USSD 响应以某种方式可以被捕获,这可能可以在应用程序中完成。当然,这不是我建议在要分发的应用程序中使用的方法,代码甚至可能因运营商而异。
正如许多人所说:
String phoneNumber = TelephonyManager.getDefault().getLine1Number();
可用性严格取决于运营商和 SIM 卡上的数字编码方式。如果它是由制造 SIM 卡的公司或移动运营商本身硬编码的。这与设置->关于手机中的返回相同。