Вызвать из проиложения по телефону нужный контакт

В приложении Criminal Intent для преступления можно выбрать подозреваемого из списка контактов. Также должна быть возможность позвонить этому подозреваемому.
Я явно делаю что-то не так, потому что ничего не работает: контакт выбирается, но как ему позвонить, я не понимаю.

CrimeFragment.java

public class CrimeFragment extends Fragment {

    ...
    private static final int REQUEST_CONTACT = 1;

    ...
    private Button mSuspectButton;
    private Button mSuspectCallButton;

    private String mSuspectID;

    ...

    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        if (resultCode != Activity.RESULT_OK)
            return;
        if (requestCode == REQUEST_DATE) {
            ...
        } else if (requestCode == REQUEST_CONTACT && data != null) {
            // здесь всё работает
            Uri contactUri = data.getData();
            String[] queryFields = new String[] {
                    ContactsContract.Contacts.DISPLAY_NAME,
                    ContactsContract.Contacts._ID
            };
            try (Cursor c = getActivity().getContentResolver()
                    .query(contactUri, queryFields, null, null, null)) {
                if (c.getCount() == 0)
                    return;
                c.moveToFirst();
                String suspect = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                mCrime.setSuspect(suspect);
                mSuspectButton.setText(suspect);
                mSuspectID = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID));
                mSuspectCallButton.setEnabled(true);
            }
        }
    }

    // когда пользователь нажимает на кнопку mSuspectButton, он выбирает подозреваемого
    private void attachSuspectButton(View view) {
        // здесь всё работает
        final Intent pickContact = new Intent(Intent.ACTION_PICK,
                ContactsContract.Contacts.CONTENT_URI);
        mSuspectButton = view.findViewById(R.id.crime_suspect);
        mSuspectButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivityForResult(pickContact, REQUEST_CONTACT);
            }
        });
        if (!mCrime.getSuspect().isEmpty())
            mSuspectButton.setText(mCrime.getSuspect());

        PackageManager packageManager = getActivity().getPackageManager();
        if (packageManager.resolveActivity(
                pickContact,
                PackageManager.MATCH_DEFAULT_ONLY) == null)
            mSuspectButton.setEnabled(false);
    }

    // когда пользователь нажимает на кнопку mSuspectCallButton, он звонит подозреваемому
    private void attachSuspectCallButton(View view) {
        mSuspectCallButton = view.findViewById(R.id.crime_suspect_call);
        mSuspectCallButton.setEnabled(false);
        mSuspectCallButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // тут я что-то пытался написать
                String[] whereArgs = new String[] { mSuspectID };
                try (Cursor c = getActivity().getContentResolver().query(
                        ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                        null,
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
                        whereArgs,
                        null
                )) {
                    if (c.getCount() == 0)
                        return;
                    c.moveToFirst();
                    Intent callContact = new Intent(Intent.ACTION_DIAL,
                            Uri.parse("tel:" + c.getString(0)));
                    startActivity(callContact);
                }
            }
        });
    }
}

UPD:
Можно пока оставить вопрос о том, правильно ли я написал метод attachSuspectCallButton(View), потому что для начала надо решить проблему того, что на строчке с созданием объекта c класса Cursor вылетает ошибка. Не могу привести весь текст ошибки, но она связана с тем, что у приложения нет разрешения android.permission.READ_CONTACTS.
Несмотря на это, в манифесте у меня это разрешение прописано:

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.bignerdranch.android.criminalintentv1">

    <!--    на всякий случай добавил оба варианта-->
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission-sdk-23 android:name="android.permission.READ_CONTACTS" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".CrimeListActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".CrimePagerActivity"
            android:parentActivityName=".CrimeListActivity" />
    </application>

</manifest>

Ответы (0 шт):