2017-12-30 16 views
1

mPhoneNumber 변수가 null로 되돌아옵니다. 나는이 일을 일주일 동안 디버깅 해왔고, 나는 극도로 붙어있다. 왜 getLine1Number은 null을 반환합니까?TelephonyManager.getLine1Number()가 null을 반환합니다.

try 
{ 
    TelephonyManager tMgr = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE); 
    if (tMgr != null) 
    { 
     if (checkSelfPermission(android.Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED) 
     { 
      if (checkSelfPermission(android.Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) 
      { 
       // TODO: Consider calling 
       // Activity#requestPermissions 
       // here to request the missing permissions, and then overriding 
       // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
       // int[] grantResults) 
       // to handle the case where the user grants the permission. See the documentation 
       // for Activity#requestPermissions for more details. 
       return; 
      } 
     } 
     String mPhoneNumber = tMgr.getLine1Number(); 
     // Log.v("PHONE: ", mPhoneNumber); 
    } 
    else 
    { 
     //Log.v("PHONE NO: ", "NO"); 
    } 
} 
catch(Exception e) 
{ 
    // TODO: Handle exception 
} 
+1

을 확인하시기 바랍니다. 그렇다면 당신은 돌아옵니다. 그렇지 않으면 전화 번호를 읽으려고합니다. String mPhoneNumber = tMgr.getLine1Number(); 라인은 안드로이드를 확인하는 대괄호 안에 있어야합니다 .Manifest.permission.READ_PHONE_STATE. 또는 ==를! = –

+0

으로 변경해야합니다.이 문제 이외에도 [때때로 null을 반환하는 것으로 문서화되어 있습니다] (https://developer.android.com/reference/android/telephony/TelephonyManager) .html # getLine1Number()). – CommonsWare

+0

여기서'mPhoneNumber'는'null'이고 어떤 다른 변수는 같은 이름으로 쓰이지 않았습니까? 당신은 NPE를 가지고 있다고 말했지만,이 코드는 NPE를 던지지 않을 것입니다. (이 부분을 삭제했습니다. 그렇지 않으면 아마도 중복으로 닫힐 것입니다.) – NickL

답변

2

네트워크 공급자는 항상 SIM 카드에 전화 번호 (msisdn)를 저장하지 않습니다. 따라서 전화 번호를 얻는 것은 사용하는 모바일 운영자에 따라 크게 달라집니다.

일부 운영자는 게이트웨이를 통과 한 후 전화 번호를 헤더에 입력합니다 (웹 브라우저 사용자의 경우). 그들 중 일부는 msisdn을 SIM 카드에 직접 놓습니다. 그 중 일부는 사용자를 식별하는 "토큰"만 제공합니다.

숫자를 얻으려고하면 "null"값을 얻는 이유가 될 수 있습니다.

당신이 전화 상태를 읽을 수있는 권한이 있는지 검사하는 4 라인에서 that 너무