如何获取SIM卡号android?

时间:2015-03-12 06:11:44

标签: android

我想在android中编写简单的应用程序来获取SIM卡号,我使用此代码:

TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
        String mPhoneNumber = tMgr.getLine1Number();

将Fragment中的代码写入此块:

 public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

在这一行:

mAppContext.getSystemService(Context.TELEPHONY_SERVICE);

这部分我收到错误:mAppContext.getSystemService。 我该如何解决这个问题? 谢谢你关注我的问题。

6 个答案:

答案 0 :(得分:2)

使用Fragment

getActivity()中获取上下文
TelephonyManager tMgr = (TelephonyManager)getActivity().getSystemService(Context.TELEPHONY_SERVICE);

答案 1 :(得分:0)

您使用的方法是SDK中唯一可以执行此操作的方法,仅适用于SIM卡上存储号码的设备,而只有部分运营商才能使用。对于所有其他运营商,您必须要求用户手动输入电话号码,因为该号码不会存储在设备的任何位置,您可以从中检索它。

答案 2 :(得分:0)

它为您提供所有联系人:

Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null,
                null);
Cursor phoneCursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                    Phone_CONTACT_ID + " = ?", new String[] { contact_id },
                    null);
String phoneNumber = phoneCursor.getString(phoneCursor
                            .getColumnIndex(NUMBER));

为游标创建循环并获取所有联系人。

答案 3 :(得分:0)

您是否已在清单中提供了READ_PHONE_STATE权限。

答案 4 :(得分:0)

请检查AndroidManifest.xml是否已声明以下权限。

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

如果没有,请在将mAppContext更改为getActivity()后再添加以运行您的代码。

答案 5 :(得分:0)

由于某些原因,如果设备没有SIM卡号存储支持,则此API将为空。如果是这样,我们必须要求用户手动输入数字。

TelephonyManager telephonyManager = (TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE);
String phone = telephonyManager.getLine1Number();
if (phone != null && phone.isEmpty()) {
    // TODO: ask the user to input his/her telephone number
}