마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

화면에 나오게 하려면 어떻게 해야 하나요?

0 추천
public class MainActivity extends AppCompatActivity {
    private static final int PERMISSIONS_REQUEST_CODE = 22;
    private static final String TAG = "전화번호";
    @SuppressLint("HardwareIds")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView txtTest = findViewById(R.id.txtPhoneNo);
        txtTest.setText(TAG);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            if (chkPermission()) {
                
                TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
                if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_NUMBERS) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {

                    return;
                }


                Log.d(TAG, "전화번호 : [ getLine1Number ] >>> " + tm.getLine1Number());

            }
        }

    }

    @SuppressLint("ObsoleteSdkInt")
    @RequiresApi(api = Build.VERSION_CODES.R)
    public boolean chkPermission() {

        boolean mPermissionsGranted;
        String[] mRequiredPermissions = new String[1];

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            mRequiredPermissions[0] = Manifest.permission.READ_PHONE_NUMBERS;

        }else{
            mRequiredPermissions[0] = Manifest.permission.READ_PRECISE_PHONE_STATE;
        }


        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

            mPermissionsGranted = hasPermissions(mRequiredPermissions);


            if (!mPermissionsGranted) {

                ActivityCompat.requestPermissions(MainActivity.this, mRequiredPermissions, PERMISSIONS_REQUEST_CODE);
            }
        } else {
            mPermissionsGranted = true;
        }

        return mPermissionsGranted;
    }


    public boolean hasPermissions(String[] permissions) {

        for (String permission : permissions) {
            if (checkCallingOrSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }
        return true;
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == PERMISSIONS_REQUEST_CODE) {

            boolean chkFlag = false;

            for (int g : grantResults) {
                if (g == -1) {
                    chkFlag = true;
                    break;
                }
            }


            if (chkFlag){
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
                    chkPermission();
                }
            }
        }
    }
}

 

String TAG = "전화번호"

위 전하번호 부분에 추출된 전화번호가 들어 가야 하는데요..

현재 작동을 안하고 있습니다.

어떻게 수정하면 String TAG에 전화번호가 들어 가는건가요?

 

맘여리노앙자 (480 포인트) 님이 4월 14일 질문

1개의 답변

0 추천
 
채택된 답변

브레이크 포인트를 걸어서 디버깅을 해보세요. 왜 원하는 대로 동작을 안하는지 확인하실 수 있을 겁니다. 그래야 문제를 해결하실 수가 있어요. 언뜻 봐서는 퍼미션 처리하는 부분에 문제가 있을 것으로 보입니다. 이미 체크한 퍼미션을 다시 체크한다던지, 퍼미션 거절에 대한 처리가 명확하지 않다던지 등등.

 

@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
개발자 문서 꼭 참조하시구요.

참고로, 제 코드는 테스트가 안된 것이니 참고만 하세요.

spark (227,830 포인트) 님이 4월 14일 답변
맘여리노앙자님이 4월 20일 채택됨
...