我有一个应用程序,我在其中获取了呼叫日志和联系人列表,并在RecyclerView中显示它们。一切都很好,直到android-8。突然,我发现名字没有显示在Android-9设备上。然后,调试显示CACHED_NAME和CACHED_PHOTO_URI始终在andorid-9上返回null。我得到NUMBER,DURATION和其他所有内容,只有CACHED_NAME和CACHED_PHOTO_URI丢失。
我已经检查了android-9的更改日志,正确处理了calllog权限,我正在使用此问题附加我的权限。我的应用程序也正确地获取运行时权限。我还在设备的设置上查看了它。此外,我的应用程序也设置为默认电话应用程序。
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
<uses-permission android:name="android.permission.ANSWER_PHONE_CALLS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.WRITE_CALL_LOG" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
String number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));
String name = cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME));
Log.d("tag", "name: " + (name == null ? "null": name));
String date = cursor.getString(cursor.getColumnIndex(CallLog.Calls.DATE));
String duration = cursor.getString(cursor.getColumnIndex(CallLog.Calls.DURATION));
String photoUri = cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_PHOTO_URI));
Log.d("tag", "photoUri: " + (photoUri == null ? "null": photoUri));
String subscription_id = cursor.getString(cursor.getColumnIndex(CallLog.Calls.PHONE_ACCOUNT_ID));
String subscription_component_name = cursor.getString(cursor.getColumnIndex(CallLog.Calls.PHONE_ACCOUNT_COMPONENT_NAME));
它在Android 8及以下工作正常,谁能告诉我android-9的问题在哪里?
如果需要CALL_LOG GROUP的RuntimePermission,请检查一下。因为他们在Android-9上做了一些改动