How to block outgoing calls and texts to contacts (Prevent drunk dialing)
<p>I am making an android app for a class that prevents users from calling or texting while they are drunk. Basically, before they start drinking, they start the app which would block all outgoing calls and texts to their contacts until they answer a math problem to prove their sobriety. I've hit a snag while trying to block calls and texts because I can't seem to get BroadcastReceivers to accomplish this. Basically when the user hits a "Start" button, I'd like the BroadcastReceiver to start listening for and blocking outgoing calls until the user passes a sobriety test (inputs correct answer to math problem). Is there any way to accomplish this?</p>

<p>Thanks a ton!
Matt</p>

<p>Here is my main activity: </p>

<pre><code>public class MainActivity extends Activity {

    int answer;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final EditText userInput = (EditText) findViewById(R.id.answerinput);
        userInput.setEnabled(false);

        //This creates the button object for the "Start Drinking" button
        final Button leftbutton = (Button) findViewById(R.id.leftbutton);

        //This creates the button object for the "Make Call" button
        final Button rightbutton = (Button) findViewById(R.id.rightbutton);
        rightbutton.setEnabled(false);

        leftbutton.setOnClickListener(new View.OnClickListener() {
            /**
             * Description: This method listens for a click on the "Make Call" button. Once
             * the button is clicked, this method will call other methods in order to create a 
             * random math problem, display this problem to the user, and check to see if the user
             * answered correctly. If they did, then this method will call the dialer to make
             * a phone call.
             * @author Matthew
             * @params A view object to see the button
             * @return void
             * @throws None
             */
            public void onClick(View v) {
                rightbutton.setEnabled(true);
                leftbutton.setEnabled(false);
            }
        });


        rightbutton.setOnClickListener(new View.OnClickListener() {
            /**
             * Description: This method listens for a click on the "Send Text" button. Once
             * the button is clicked, this method will call other methods in order to create a 
             * random math problem, display this problem to the user, and check to see if the user
             * answered correctly. If they did, then this method will call the text messaging service
             * to allow the user to send a text. 
             * @author Matthew
             * @params A view object to see the button
             * @return void
             * @throws None
             */
            public void onClick(View v) {
                answer = createMathProblem();
                userInput.setEnabled(true);
            }
        });

        userInput.setOnKeyListener(new OnKeyListener() {

            public boolean onKey(View v, int keyCode, KeyEvent event) {
                String text = userInput.getText().toString();
                // If the event is a key-down event on the "enter" button
                if ((event.getAction() == KeyEvent.ACTION_DOWN)
                        &amp;&amp; (keyCode == KeyEvent.KEYCODE_ENTER)) {
                    if (matchAnswer(answer, Integer.parseInt(text))) {
                        leftbutton.setEnabled(true);
                        rightbutton.setEnabled(false);
                        userInput.setEnabled(false);
                        //airplane();
                        Toast.makeText(MainActivity.this, "Correct!", Toast.LENGTH_LONG).show();
                    }
                    return true;
                }
                return false;
            }
        });

    }

    /**
     * Description: This method checks to see if the user answered the math problem
     * correctly.
     * @author Matthew
     * @params The correct answer to the math problem and the user's input answer
     * @return True or false depending on if the user answered correctly
     * @throws None
     */
    public boolean matchAnswer(int correctAnswer, int userAnswer) {
        return (correctAnswer == userAnswer);
    }

    /**
     * Description: This method creates a random math problem for the user to 
     * answer and displays it to the screen. 
     * @author Matthew
     * @params None
     * @return The correct answer to the math problem.
     * @throws None
     */
    public int createMathProblem() {
        int random1 = (int) (Math.random() * 100);
        int random2 = (int) (Math.random() * 100);
        int answer = random1 + random2;
        Toast.makeText(MainActivity.this, random1 + " + " + random2 + " = ?", Toast.LENGTH_LONG).show();
        return answer;
    }


}
</code></pre>

<p>Here is my BroadcastReceiver:</p>

<pre><code>public class CallTextReceiver extends BroadcastReceiver {

    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
            if (getResultData() != null) {
                setResultData(null);

                Toast.makeText(context, "Blocked", Toast.LENGTH_LONG).show();
            }
        }
    }
}
</code></pre>
