在Android 9及以上版本中,应用程序无法访问被阻止的电话号码列表。这是因为Google为了保护用户的隐私和安全而对API进行了更改。但是,您可以通过以下代码示例,使用ContentObserver监视通话记录中的拦截记录,从而检测拦截号码。
首先,您需要在AndroidManifest.xml文件中添加以下权限:
然后,创建以下ContentObserver:
private class BlockedNumberContentObserver extends ContentObserver {
public BlockedNumberContentObserver(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange, Uri uri) {
super.onChange(selfChange, uri);
if (uri != null && uri.toString() != null && uri.toString().equals(CallLog.Calls.CONTENT_URI.toString())) {
String[] projection = new String[]{ CallLog.Calls.CACHED_NUMBER_TYPE, CallLog.Calls.NUMBER };
Cursor cursor = getContentResolver().query(CallLog.Calls.CONTENT_URI, projection, null, null,CallLog.Calls.DEFAULT_SORT_ORDER);
if (cursor != null) {
try {
int indexNumber = cursor.getColumnIndex(CallLog.Calls.NUMBER);
int indexCachedNumberType = cursor.getColumnIndex(CallLog.Calls.CACHED_NUMBER_TYPE);
while (cursor.moveToNext()) {
String number = cursor.getString(indexNumber);
int cachedNumberType = cursor.getInt(indexCachedNumberType);
if (cachedNumberType == CallLog.Calls.BLOCKED_NUMBER_TYPE){
// Detected a blocked number
}
}
} finally {
cursor.close();
}
}
}
}
}
然后,在您的代码中注册此ContentObserver:
BlockedNumberContentObserver contentObserver = new BlockedNumberContentObserver(new Handler());
getContentResolver().registerContentObserver(CallLog.Calls.CONTENT_URI, true, contentObserver);
现在,当用户拦截一个电话号码时,您将在拦截记录中检测到拦截号码。
请注意,在此示例中,我们仅检测拦截号码,因为Google将API更改限制访问被屏蔽的电话号码列表。如果您需要更详
上一篇:AndroidBundle与实例