Получить номер сим-карты пользователя Android

В моем приложении я хочу получить номер сим-карты пользователя, если он есть, я пробовал код ниже, но он возвращает ""

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

Требуемое разрешение

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

Я искал везде, чтобы найти способ получить номер сим-карты пользователя, но у меня ничего не получилось. Некоторые люди говорят, что, возможно, у поставщика сим-карты пользователя есть ограничения на эту функцию, но я использую приложение imo, которое получает номер моей сим-карты и отображает его в приложении, поэтому я пробовал разные методы на одном и том же мобильном телефоне, но ничего не работает, если кто-нибудь знает рабочий метод, пожалуйста, сообщите мне.


person Martin    schedule 11.04.2017    source источник
comment
Нет возможности получить номер сима. Вы можете подумать, что если ваше приложение может получить ваш номер телефона, все приложения будут делать это.   -  person RoShan Shan    schedule 11.04.2017
comment
как это сделать?   -  person Martin    schedule 11.04.2017
comment
@RoShan Shan Это не номер телефона, это номер сим-карты, который состоит из 14 цифр. Попробуйте tMgr.getSimSerialNumber().   -  person Akshay Bhat 'AB'    schedule 11.04.2017
comment
Я думаю, он хочет получить номер телефона String mPhoneNumber = tMgr.getLine1Number();   -  person RoShan Shan    schedule 11.04.2017
comment
мне не нужен серийный номер, мне нужна сим-карта/номер телефона, куда я могу отправить текстовое сообщение для подтверждения личности пользователя   -  person Martin    schedule 11.04.2017
comment
О, тогда вы не можете этого сделать. Единственный способ получить номер телефона — попросить пользователя отправить смс на ваш сервер, который использует какой-либо сторонний сервис для получения смс и получения номера.   -  person Akshay Bhat 'AB'    schedule 11.04.2017
comment
Проверьте этот ответ для сторонних сервисов stackoverflow.com/questions/20890318/.   -  person Akshay Bhat 'AB'    schedule 11.04.2017


Ответы (3)


Прежде всего, я предлагаю вам использовать общие предпочтения, вы просто сохраняете их и используете в своем приложении, где хотите. это самый простой способ, я думаю.

ИЛИ

попробуй зарегистрироваться

Телефон --> Настройки --> О программе -->

Идентификация телефона. Если вы можете просмотреть номер там, возможно, вы сможете получить номер. но если вы не можете посмотреть номер телефона в настройках, то вы не сможете попасть по этому коду.

person Aditya Vyas-Lakhan    schedule 11.04.2017
comment
да попробовал, и он показывает неизвестно, мне просто интересно, как приложение imo получает доступ к моему номеру на том же устройстве - person Martin; 11.04.2017
comment
@Martin, тогда я не думаю, что это возможно для вашего приложения, сэр. - person Aditya Vyas-Lakhan; 11.04.2017

Шаг 1. Добавьте необходимое разрешение в файл AndroidManifest.xml.

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

Примечание. Для устройств с версией 6.0 (marshmallow) и выше используйте < strong>Разрешения на запуск Rime

Шаг 2:

TelephonyManager telephonyManager = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);

    String sim1= telephonyManager.getLine1Number();  

    String sim2= telephonyManager.getLine2Number();

Проверьте это для получения дополнительной информации.

person RAJESH KUMAR ARUMUGAM    schedule 11.04.2017
comment
возвращает пустую строку - person Martin; 11.04.2017
comment
Какая у вас модель устройства..?? - person RAJESH KUMAR ARUMUGAM; 11.04.2017
comment
Проверьте это stackoverflow.com/questions/5134398/ - person RAJESH KUMAR ARUMUGAM; 11.04.2017

Включите разрешение в манифесте, получите свой номер SMI и номер IMEI

Манифест.Java

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

MainActivity.Java

  public class MainActivity extends AppCompatActivity {
     Activity mActivity; 
     String mStatus;
    private TextView mSmiTxt;

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mActivity = MainActivity.this;
        mSmiTxt = (TextView) this.findViewById(R.id.smitxt);
mStatus=loadSMI1();
 mSmiTxt.setText(mStatus);

            /** Fading Transition Effect */
            overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
        }
      /**
         * Called when the 'loadIMEI' function is triggered.
         */
        public void loadIMEI() {
            // Check if the READ_PHONE_STATE permission is already available.
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)
                    != PackageManager.PERMISSION_GRANTED) {
                // READ_PHONE_STATE permission has not been granted.
                requestReadPhoneStatePermission();
            } else {
                // READ_PHONE_STATE permission is already been granted.
                loadImei();
            }
        }
      public String getDeviceUniqueID() {
            String device_unique_id = Settings.Secure.getString(getContentResolver(),
                    Settings.Secure.ANDROID_ID);
            return device_unique_id;
        }

        private void requestReadPhoneStatePermission() {
            if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                    Manifest.permission.READ_PHONE_STATE)) {
                // Provide an additional rationale to the user if the permission was not granted
                // and the user would benefit from additional context for the use of the permission.
                // For example if the user has previously denied the permission.
                new AlertDialog.Builder(MainActivity.this)
                        .setTitle("Permission Request")
                        .setMessage(getString(R.string.permission_read_phone_state_rationale))
                        .setCancelable(false)
                        .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                //re-request
                                ActivityCompat.requestPermissions(MainActivity.this,
                                        new String[]{Manifest.permission.READ_PHONE_STATE},
                                        MY_PERMISSIONS_REQUEST_READ_PHONE_STATE);
                            }
                        })
                        .setIcon(R.drawable.error)
                        .show();
            } else {
                // READ_PHONE_STATE permission has not been granted yet. Request it directly.
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE},
                        MY_PERMISSIONS_REQUEST_READ_PHONE_STATE);
            }
        }
     /**
         * Callback received when a permissions request has been completed.
         */
        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                               @NonNull int[] grantResults) {

            if (requestCode == MY_PERMISSIONS_REQUEST_READ_PHONE_STATE) {
                // Received permission result for READ_PHONE_STATE permission.est.");
                // Check if the only required permission has been granted
                if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // READ_PHONE_STATE permission has been granted, proceed with displaying IMEI Number
                    //alertAlert(getString(R.string.permision_available_read_phone_state));
                    loadImei();
                } else {
                    alertAlert(getString(R.string.permissions_not_granted_read_phone_state));
                }
            }
        }
     public String loadImei() {
            //Have an  object of TelephonyManager
            TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
            //Get IMEI Number of Phone  //////////////// for this example i only need the IMEI
            String IMEINumber = tm.getDeviceId();
            return IMEINumber;
        }
     private void alertAlert(String msg) {
            new AlertDialog.Builder(MainActivity.this)
                    .setTitle("Permission Request")
                    .setMessage(msg)
                    .setCancelable(false)
                    .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            // do somthing here
                        }
                    })
                    .setIcon(R.drawable.error)
                    .show();
        }

     public String loadSMI1() {
            TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
            String sim1 = tm.getLine1Number();
            return sim1;
        }


    }

Если номер SMI возвращает значение null, получите его в WhatsApp.

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


AccountManager am = AccountManager.get(this);
Account[] accounts = am.getAccounts();

ArrayList<String> googleAccounts = new ArrayList<String>();
for (Account ac : accounts) {
    String acname = ac.name;
    String actype = ac.type;
    // Take your time to look at all available accounts
    System.out.println("Accounts : " + acname + ", " + actype);
}
if(actype.equals("com.whatsapp")){
    String phoneNumber = ac.name;
}
person pradeep    schedule 11.04.2017
comment
Мартин, попробуй вот это TelephonyManager telemamanger = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); Строка getSimSerialNumber = telemamanger.getSimSerialNumber(); Строка getSimNumber = telemamanger.getLine1Number(); - person pradeep; 11.04.2017
comment
выдает ошибку не удается разрешить символ oneTelephonyManager - person Martin; 11.04.2017
comment
Передайте свою активность следующим образом: TelephonyManager tManager = (TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE); - person pradeep; 11.04.2017