此代码在 Android 6 (棉花糖)之前可以正常工作:
TelephonyManager tm = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
Class c = Class.forName(tm.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
Object telephonyService = m.invoke(tm);
c = Class.forName(telephonyService.getClass().getName());
m = c.getDeclaredMethod("endCall");
m.setAccessible(true);
m.invoke(telephonyService);
我仍然打了endCall(context, number)
,无法阻止通话。需要Android Nougat,Oreo,Pie及更高版本中的工作解决方案。
更新
我包括了来自牛轧糖官方文档的以下代码,但仍然没有将其添加到阻止列表中。
Cursor c = mContext.getContentResolver().query(BlockedNumberContract.BlockedNumbers.CONTENT_URI,
new String[]{BlockedNumberContract.BlockedNumbers.COLUMN_ID,
BlockedNumberContract.BlockedNumbers.COLUMN_ORIGINAL_NUMBER,
BlockedNumberContract.BlockedNumbers.COLUMN_E164_NUMBER}, null, null, null);
答案 0 :(得分:0)
Android 9不能使用非SDK接口
Android 9引入了使用非SDK的新限制 接口,无论是直接,通过反射还是通过JNI。这些 应用程序引用非SDK时会应用限制 接口或尝试使用反射或JNI获取其句柄。
除非您是系统应用程序或默认拨号程序或默认短信应用程序,否则您似乎无法读写BlockedNumberContract
权限
仅系统,默认SMS应用程序和默认电话 应用程序(请参阅TelecomManager.getDefaultDialerPackage())和运营商应用程序 (请参阅CarrierService)可以读取和写入被阻止的号码 提供者。但是,可以访问canCurrentUserBlockNumbers(Context) 通过任何应用程序。