完美拦截 android 内的来电
perfectly blocking incoming calls in android
我想阻止所有来电但收到通知。为此,我正在执行以下代码:
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
try {
Class c = Class.forName(tm.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
telephonyService = (ITelephony) m.invoke(tm);
Bundle bundle = intent.getExtras();
String phoneNumber = bundle.getString("incoming_number");
Log.d("INCOMING", phoneNumber);
if ((phoneNumber != null)) {
telephonyService.endCall();
Log.d("HANG UP", phoneNumber);
}
} catch (Exception e) {
e.printStackTrace();
}
但有时它无法正常工作,我的意思是有时它不会立即响应,因此 phone 开始响铃很短的时间,然后 "telephonyService.endCall()" 结束通话。
我想立即阻止呼叫而不提供响铃时间。可能吗?
您可以使用 Android 7.0 中提供的呼叫筛选 API:
https://developer.android.com/about/versions/nougat/android-7.0.html#call_screening
如果您需要针对较早的平台,您可能需要不同的解决方案。
对于我的解决方案,你拒绝来电太晚了。你可以像这样听 callstate
和 。第一次响铃是CallAudioManager.java
接听oncallstatechanged
,来电状态是响铃,所以你可以收到这个事件,拒绝来电。
case "RINGING":
Log.d(TAG, "State : Ringing, incoming_number : " + incoming_number);
if((previus_state.equals("IDLE")) || (previus_state.equals("FIRST_CALL_RINGING"))){
current_state ="FIRST_CALL_RINGING";
}
我想阻止所有来电但收到通知。为此,我正在执行以下代码:
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
try {
Class c = Class.forName(tm.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
telephonyService = (ITelephony) m.invoke(tm);
Bundle bundle = intent.getExtras();
String phoneNumber = bundle.getString("incoming_number");
Log.d("INCOMING", phoneNumber);
if ((phoneNumber != null)) {
telephonyService.endCall();
Log.d("HANG UP", phoneNumber);
}
} catch (Exception e) {
e.printStackTrace();
}
但有时它无法正常工作,我的意思是有时它不会立即响应,因此 phone 开始响铃很短的时间,然后 "telephonyService.endCall()" 结束通话。 我想立即阻止呼叫而不提供响铃时间。可能吗?
您可以使用 Android 7.0 中提供的呼叫筛选 API:
https://developer.android.com/about/versions/nougat/android-7.0.html#call_screening
如果您需要针对较早的平台,您可能需要不同的解决方案。
对于我的解决方案,你拒绝来电太晚了。你可以像这样听 callstate
和 。第一次响铃是CallAudioManager.java
接听oncallstatechanged
,来电状态是响铃,所以你可以收到这个事件,拒绝来电。
case "RINGING":
Log.d(TAG, "State : Ringing, incoming_number : " + incoming_number);
if((previus_state.equals("IDLE")) || (previus_state.equals("FIRST_CALL_RINGING"))){
current_state ="FIRST_CALL_RINGING";
}