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

내 전화번호 출력하려고 하는데 잘 안됩니다 ㅠㅠ

0 추천
public class MainActivity extends AppCompatActivity {

    TextView txtPhoneNo;



     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);




         txtPhoneNo = (TextView)findViewById(R.id.txtPhoneNo);

         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}, 1);
         } else {
//manager
             TelephonyManager telephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);

// 통신사 전화번호 구하기
             txtPhoneNo.setText("전화번호"+ telephonyManager.getLine1Number().replace("-", "").replace("+82", "0"));
      
         }
     }


 

 

내 전화번호를 textview에 나타내려고 하는데

작동이 안되는데 어떻게 해야 할까요?

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

1개의 답변

0 추천
 
채택된 답변

Permission을 결과를 처리하는 곳이 안보이네요.

개발자 문서를 읽어보시고 permission 결과를 처리하는 코드를 넣으세요.

https://developer.android.com/training/permissions/requesting

// Register the permissions callback, which handles the user's response to the
// system permissions dialog. Save the return value, an instance of
// ActivityResultLauncher, as an instance variable.
private ActivityResultLauncher<String> requestPermissionLauncher =
    registerForActivityResult(new RequestPermission(), isGranted -> {
        if (isGranted) {
            displayPhoneNumber();
        } else {
            // 퍼미션이 거절당했을 때의 처리. 보통은 퍼미션이 왜 필요한지에 메세지를 보여준다.
        }
    });


@Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);


         txtPhoneNo = (TextView)findViewById(R.id.txtPhoneNo);

         checkPhoneNumberPermission();
     }

private void checkPhoneNumberPermission() {
   boolean permissionGranted = if (ContextCompat.checkSelfPermission(
        CONTEXT, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED);
   if (permissionGranted()) {
       displayPhoneNumber();
       return
  }

  // 사용자가 퍼미션을 이미 한번 거절했을 때의 처리. 예를 들면, 권한이 왜 꼭 필요한지 대한 메세지를 보여줌
  boolean permissionDenidedOnce = ActivityCompat.shouldShowRequestPermissionRationale(permission.READ_PHONE_STATE);
  if (permissionDenidedOnce) {
       doSomething();
       return
  } 
   
  requestPermissionLauncher.launch(Manifest.permission.READ_PHONE_STATE);
  
}


private void displayPhoneNumber() {
      TelephonyManager telephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);

// 통신사 전화번호 구하기
             txtPhoneNo.setText("전화번호"+ telephonyManager.getLine1Number().replace("-", "").replace("+82", "0"));
}

기본적으로는 위처럼 처리하면 되는데, 퍼미션 핸들링 자체가 간단하지는 않으므로 제 코드는 참조만 하시고 님의 요구사항에 맞게 작업을 하신다음, 여러가지 경우를 테스트 해보시길 권장합니다.

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