Как получить доступ к пропущенным вызовам в журнале вызовов?

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

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

Uri allCalls = Uri.parse("content://call_log/calls");
                Cursor c = managedQuery(allCalls, null, null, null, null);
                String num= c.getString(c.getColumnIndex(CallLog.Calls.NUMBER));// for  number
                String name= c.getString(c.getColumnIndex(CallLog.Calls.CACHED_NAME));// for name
                String duration = c.getString(c.getColumnIndex(CallLog.Calls.DURATION));// for duration
                int type = Integer.parseInt(c.getString(c.getColumnIndex(CallLog.Calls.TYPE)));// for call type, Incoming or out going.
                Toast.makeText(MainActivity.this, num, Toast.LENGTH_SHORT).show();

Ошибка:

java.lang.SecurityException: Permission Denial: opening provider com.android.providers.contacts.CallLogProvider from ProcessRecord{6cd48b2 23881:com.example.d_actions/u0a108} (pid=23881, uid=10108) requires android.permission.READ_CALL_LOG or android.permission.WRITE_CALL_LOG

Изменить: managedQuery(allCalls, null, null, null, null); устарело.


person Muhammad Sorour    schedule 25.07.2020    source источник
comment
Даете ли вы во время выполнения разрешение на чтение и запись журналов вызовов?   -  person chand mohd    schedule 25.07.2020
comment
да это уже в манифесте   -  person Muhammad Sorour    schedule 30.07.2020
comment
Этого недостаточно. Если ваш таргетинг выше зефира, вам также нужно спрашивать во время выполнения.   -  person chand mohd    schedule 30.07.2020


Ответы (1)


Добавьте это в свой тег manifest.xml выше:

<uses-permission android:name="android.permission.READ_CALL_LOG"></uses-permission>
<uses-permission android:name="android.permission.WRITE_CALL_LOG"></uses-permission>

Вам также необходимо получить разрешение на выполнение на устройствах 6.0 ›

  final String[] NECESSARY_PERMISSIONS = new String[] {Manifest.permission.GET_ACCOUNTS };

    if (ContextCompat.checkSelfPermission(DialerHomeActivity.this,
                    Manifest.permission.GET_ACCOUNTS) == PackageManager.PERMISSION_GRANTED) {

        //Permission is granted

    } else {

        //ask for permission

        ActivityCompat.requestPermissions(
                DialerHomeActivity.this,
                NECESSARY_PERMISSIONS, 123);
    }
person Remon Shehatta    schedule 26.07.2020