![](/img/trans.png)
[英]Android Nougat, Oreo - How to add long press action to Quick toggles?
[英]How to Block Call in Android Nougat, Oreo and above programatically?
這段代碼在Android 6 ( Marshmallow )之前可以正常工作:
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);
Android 9不能使用非SDK界面
Android 9引入了對非SDK接口使用的新限制,無論是直接,通過反射還是通過JNI。 每當應用程序引用非SDK接口或嘗試使用反射或JNI獲取其句柄時,都會應用這些限制。
除非您是系統應用程序或默認撥號程序或默認短信應用程序,否則您似乎無法讀寫BlockedNumberContract
權限
只有系統,默認的SMS應用程序和默認的電話應用程序(請參閱TelecomManager.getDefaultDialerPackage())和運營商應用程序(請參閱CarrierService)可以讀取和寫入阻止號碼提供程序。 但是,canCurrentUserBlockNumbers(Context)可以由任何應用程序訪問。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.