Android извлекает неверный номер телефона

Я пробовал почти каждый другой ответ или код, но моя проблема все еще сохраняется. Номер телефона, извлекаемый из контактов, представляет собой произвольные 3-4-значные числа, а не точный номер телефона контакта. Когда я набираю номер, он набирает «6855». Пожалуйста помоги.

код

if(mWasButtonClicked){
        String[] projections = new String[] {ContactsContract.CommonDataKinds.Phone.NUMBER};
        String selectionClause = ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?";
        String[] selectionArgs = new String[] {mContactID};


        Cursor c = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,projections,selectionClause,selectionArgs,null,null);

        try {
            if(c.getCount() == 0){return;}

            if(c!=null){
                while(c.moveToNext()){

                    c.moveToFirst();
                    phoneNumber = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

                    Log.d("TEST",phoneNumber);
                }
            }
        }finally {
            c.close();
        }
    }

для кнопки вызова

mCallButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Uri uri = Uri.parse("tel:"+phoneNumber);
            startActivity(new Intent(Intent.ACTION_CALL,uri));
        }
    });

Для получения идентификатора контакта

 Uri content_uri = data.getData();

        String[] projection = new String[] {ContactsContract.Contacts.DISPLAY_NAME,ContactsContract.Contacts._ID};

        Cursor c = getContentResolver().query(content_uri,projection,null,null,null,null);

        try {
            if(c.getCount() == 0){return;}

            if(c!=null){
                while(c.moveToNext()){

                    c.moveToFirst();
                    String name = c.getString(0);
                    mGetNameButton.setText(name);
                    mContactID = c.getString(1);
                    Log.d("TEST",mContactID);
                }
            }
        }finally {
            c.close();
        }

и журналы

2020-01-10 05:41:38.284 27904-27904/com.example.contactsuri D/TEST: 84

person Alexander Bourne    schedule 10.01.2020    source источник
comment
Отвечает ли это на ваш вопрос? Как получить номер телефона контактов в Android   -  person Daniele Segato    schedule 13.01.2020


Ответы (1)


Я добавил приведенный ниже код, необходимый для получения номера телефона устройства и кнопки вызова. надеюсь, я помогу вам решить проблему

private static final int PERMISSION_REQUEST_CODE = 1; //permission
String wantPermission = Manifest.permission.READ_PHONE_STATE; //permission
String getMyMobilePhoneNumber;

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

    //call this function
    getTheMobilePhoneNumber();

    //to able see the phone number
    TextView getPhone = findViewById(R.id.getPhone);
    getPhone.setText(getMyMobilePhoneNumber);

    //add permission
    if (!checkPermission(wantPermission)) {
        requestPermission(wantPermission);
    } else {
        Log.d("TAG", "Phone number: " + getTheMobilePhoneNumber());
        getMyMobilePhoneNumber = getTheMobilePhoneNumber();
    }


    //for calling
    Button btnCallNum = findViewById(R.id.btnCall);
    btnCallNum.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intentCall = new Intent(Intent.ACTION_DIAL);
            intentCall.setData(Uri.parse("tel:" + getMyMobilePhoneNumber));
            startActivity(intentCall);
        }
    });
}


//get your phone number by calling this
public String getTheMobilePhoneNumber() {
    TelephonyManager telMngr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

    if (ActivityCompat.checkSelfPermission(this, wantPermission) != PackageManager.PERMISSION_GRANTED) {
        return null;
    }
    getMyMobilePhoneNumber = telMngr.getLine1Number();

    return getMyMobilePhoneNumber;
}

private void requestPermission(String permission) {
    if (ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {
        Log.d("TAG NUM", "Phone state permission allows us to get phone number. Please allow it for additional functionality. ");
    }
    ActivityCompat.requestPermissions(this, new String[]{permission}, PERMISSION_REQUEST_CODE);
}

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case PERMISSION_REQUEST_CODE:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Log.d("TAG", "Phone number: " + getTheMobilePhoneNumber());
            } else {
                Log.d("TAG NUM", "Permission Denied. We can't get phone number ");
            }
            break;
    }
}

private boolean checkPermission(String permission) {
    if (Build.VERSION.SDK_INT >= 23) {
        int result = ContextCompat.checkSelfPermission(this, permission);
        return result == PackageManager.PERMISSION_GRANTED;
    } else {
        return true;
    }
}

}

также добавьте это в свой AndroidManifest

 <uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
person No Name    schedule 10.01.2020