Cómo bloquear llamadas salientes y SMS de texto

Estoy desarrollando una aplicación en la que necesito bloquear al adolescente para que no use el móvil mientras conduzco. Necesito bloquear la llamada y el sms. por favor ayuda . cualquier pequeño indicio y pistas servirá. ¡por favor, ayúdame!

Este código bloqueará su llamada total (ENTRANTE Y SALIENTE)

import java.lang.reflect.Method; import android.content.Context; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; import com.CallLogApp.helper.BlockNumberHelper; import com.CallLogApp.util.UDF; import com.android.internal.telephony.ITelephony; public class CustomPhoneStateListener extends PhoneStateListener { //private static final String TAG = "PhoneStateChanged"; Context context; public CustomPhoneStateListener(Context context) { super(); this.context = context; } @Override public void onCallStateChanged(int state, String outGoingNumber) { super.onCallStateChanged(state, outGoingNumber); switch (state) { case TelephonyManager.CALL_STATE_IDLE: break; case TelephonyManager.CALL_STATE_OFFHOOK: endCallIfBlocked(outGoingNumber); break; case TelephonyManager.CALL_STATE_RINGING: break; default: break; } } private void endCallIfBlocked(String outGoingNumber) { try { // Java reflection to gain access to TelephonyManager's // ITelephony getter TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); Class c = Class.forName(tm.getClass().getName()); Method m = c.getDeclaredMethod("getITelephony"); m.setAccessible(true); com.android.internal.telephony.ITelephony telephonyService = (ITelephony) m.invoke(tm); if (new BlockNumberHelper(context).isBlocked(outGoingNumber)) { telephonyService = (ITelephony) m.invoke(tm); telephonyService.silenceRinger(); telephonyService.endCall(); } } catch (Exception e) { e.printStackTrace(); } } } 

Aquí, el estado CALL_STATE_OFFHOOK llamará cada vez que su llamada se conecte y cuando reciba la llamada entrante

No hay ningún método que pueda saber si es una llamada entrante o una llamada saliente

Pero puede finalizar la llamada que se conectará en ambos casos

Para agregar la respuesta de Dharmendra diciendo que:

No hay ningún método que pueda saber si es una llamada entrante o una llamada saliente

De hecho, hay.

Para distinguir las llamadas entrantes de las llamadas salientes, también debe escuchar Intent.ACTION_NEW_OUTGOING_CALL . Ahora:

cuando veas primero Intent.ACTION_NEW_OUTGOING_CALL y luego CALL_STATE_OFFHOOK , se trata de una llamada saliente;

cuando vea por primera vez CALL_STATE_RINGING y luego CALL_STATE_OFFHOOK , se trata de una llamada entrante.

En segundo lugar, puede usar un PhoneStateListener o escuchar TelephonyManager.ACTION_PHONE_STATE_CHANGED . Por lo que pude ver, primero BroadcastReceiver recibe la intención, luego se notifica PhoneStateListener .

 final IntentFilter theFilter = new IntentFilter(); theFilter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED); theFilter.addAction(Intent.ACTION_NEW_OUTGOING_CALL); mBroadcastReceiver = new MyBroadcastReceiver(); mService.registerReceiver(mBroadcastReceiver, theFilter); class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ... } } 

Para bloquear llamadas salientes, necesita registrar un PhoneStateListener como:

 telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); telephonyManager.listen(new MyListener(), PhoneStateListener.LISTEN_CALL_STATE); 

Luego defina su clase MyListener como:

 private class Test extends PhoneStateListener { @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); switch(state) { case TelephonyManager.CALL_STATE_IDLE: break; case TelephonyManager.CALL_STATE_OFFHOOK://this case is for outgoing call break; case TelephonyManager.CALL_STATE_RINGING://this case is for incoming call break; default: break; } } }