0

我想阻止所有来电但得到通知。为此,我正在实现此代码:

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();
   }

但有时它不能完美运行,我的意思是有时它不会立即响应,所以电话开始响铃很短的时间,然后“telephonyService.endCall()”结束通话。我想立即阻止呼叫而不提供振铃时间。是否可以?

4

2 回答 2

0

您可以使用 Android 7.0 中提供的呼叫筛选 API:

https://developer.android.com/about/versions/nougat/android-7.0.html#call_screening

如果您需要针对较早的平台,您可能需要不同的解决方案。

于 2018-02-04T23:31:13.493 回答
0

对于我的解决方案,您拒绝来电太晚了。您可以像https://stackoverflow.com/a/15564021/6000796https://stackoverflow.com/a/33390453/6000796一样收听 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";
                }
于 2018-05-04T10:47:09.453 回答