public class MainActivity extends AppCompatActivity {
TelephonyManager manager; Timer timer = new Timer (); private int recLen = 8; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate (savedInstanceState); setContentView(R.layout.activity_main); manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); init(); } private void init() { PhoneStateListener listener = new PhoneStateListener() { @Override public void onCallStateChanged(int state, String incomingNumber) { switch (state) { // no state case TelephonyManager.CALL_STATE_IDLE: // Toast.makeText(MainActivity.this, "No state", Toast.LENGTH_SHORT).show(); break; case TelephonyManager.CALL_STATE_OFFHOOK: Toast.makeText(MainActivity.this, "接听" + incomingNumber, Toast.LENGTH_SHORT).show(); if ("The specified mobile phone number".equals(incomingNumber)) { timer.schedule(task, 1000, 1000); } break; // When the incoming call rings case TelephonyManager.CALL_STATE_RINGING: Toast.makeText(MainActivity.this, "When the incoming call rings", Toast.LENGTH_SHORT).show(); break; default: break; } super.onCallStateChanged(state, incomingNumber); } }; manager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE); } TimerTask task = new TimerTask() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { recLen--; if (recLen < 0) { timer.cancel(); Toast.makeText(MainActivity.this, "挂断", Toast.LENGTH_SHORT).show(); try { Method method = Class.forName("android.os.ServiceManager").getMethod("getService",String.class); IBinder binder = (IBinder) method.invoke(null,new Object[] {TELEPHONY_SERVICE}); ITelephony telephony = ITelephony.Stub.asInterface (binder); // hang up the phone telephony.endCall(); } catch (Exception e) { e.printStackTrace (); } } } }); } }; }
Among them, ITelephony needs to import an ITelephony.aidl file
required permissions
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/> <uses-permission android:name="android.permission.CALL_PHONE" />