Не удается получить номер IMEI при первой установке - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь получить номер IMEI устройства Android. Я тоже могу его получить, но приложение не возвращает IMEI при первой установке.мне нужно перезапустить приложение.Может кто-нибудь сказать мне, где я не прав?Заранее спасибо

    public class RootActivity extends AppCompatActivity {

    private static final int REQUEST_PERMISSION_PHONE_STATE = 1;
    TextView tv ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = findViewById(R.id.TV_imei);
        tv.setText(showPhoneStatePermission());

    }private String showPhoneStatePermission() {
        String imei ="ERROR";
        int permissionCheck = ContextCompat.checkSelfPermission(
                this, Manifest.permission.READ_PHONE_STATE);
        if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_PERMISSION_PHONE_STATE);
        } else {
            imei=getIMEI();
        }
        return imei;
    }

    private String  getIMEI() {
        TelephonyManager telephonyManager = (TelephonyManager) getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);
        @SuppressLint("MissingPermission") String deviceId = telephonyManager.getDeviceId().trim();
        return deviceId;
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        showPhoneStatePermission();
    }

}

1 Ответ

0 голосов
/ 24 февраля 2019

tv.setText(showPhoneStatePermission()) будет вызываться только один раз в OnCreate().После разрешения в onRequestPermissionsResult вы не установили текст.Вам нужно позвонить setText() после onRequestPermissionsResult.Вы можете использовать

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    tv.setText(showPhoneStatePermission());
}

Если это просто образец, тогда хорошо.Если нет, то вам не хватает обработки разрешений в вашем коде.Вы должны также справиться с Rational.Посмотрите на android-m-check-runtime-Разрешение

...