브레이크 포인트를 걸어서 디버깅을 해보세요. 왜 원하는 대로 동작을 안하는지 확인하실 수 있을 겁니다. 그래야 문제를 해결하실 수가 있어요. 언뜻 봐서는 퍼미션 처리하는 부분에 문제가 있을 것으로 보입니다. 이미 체크한 퍼미션을 다시 체크한다던지, 퍼미션 거절에 대한 처리가 명확하지 않다던지 등등.
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode != PERMISSIONS_REQUEST_CODE) return;
if (permissionsGranted()) {
displayPhoneNumber();
return;
}
showPermissionsRequiredDilog();
}
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView txtTest = findViewById(R.id.txtPhoneNo);
txtTest.setText(TAG);
handlePermissions();
}
private void handlePermissions() {
if (sdkDoesNotRequiredPermissions() || permissionsGranted()) {
displayPhoneNumber();
return;
}
if (onceDeniedPermissionExists()) {
showPermissionsRequiredDialog();
return;
}
requestPermissions();
}
private boolean sdkDoesNotRequiredPermissions() {
return Build.VERSION.SDK_INT< Build.VERSION_CODES.R;
}
private boolean permissionsGranted() {
for (permission : mRequiredPermissions) {
if (ActivityCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
private boolean onceDeniedPermissionExists() {
for (permission : mRequiredPermissions) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {
return true;
}
}
return false;
}
private void displayPhoneNumber() {
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
txtTest.setText(tm.getLine1Number());
}
private void showPermissionsRequiredDialog() {
// 왜 해당 퍼미션이 필요한지 메세지를 보여준다
}
private void requestPermissions() {
ActivityCompat.requestPermissions(MainActivity.this, mRequiredPermissions, PERMISSIONS_REQUEST_CODE);
}
위와 같은 형태를 기본으로 처리하시되 님의 상황에 맞추어서 조절하세요.
https://developer.android.com/training/permissions/requesting#java
개발자 문서 꼭 참조하시구요.
참고로, 제 코드는 테스트가 안된 것이니 참고만 하세요.