Thursday 25 July 2013

Block Incoming Calls Android

Leave a Comment

Today I will Explain how to block all incoming calls in android. To block the incoming calls I have to use Broadcast Receiver.
Broadcast Receiver is one of the main android component which allow your application to register for the Events i.e system or application events(Both). Registered Event will be notified by the android run time once the event occurs.

Step 1: create BlockCallReceiver.java
package com.arpit.blockincomingcall;
import java.lang.reflect.Method;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.TelephonyManager;

public class BlockCallReceiver extends BroadcastReceiver{
   
     Context context;
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
         Bundle myBundle = intent.getExtras();
         if (myBundle != null)
          {
             System.out.println("--------Not null-----");
             try
             {
              if (intent.getAction().equals("android.intent.action.PHONE_STATE"))
              {
                  String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
                  System.out.println("--------in state-----");
                  if (state.equals(TelephonyManager.EXTRA_STATE_RINGING))
                  {
                      // Incoming call
                    String incomingNumber =intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
                    System.out.println("--------------my number---------"+incomingNumber);
                                  
// this is main section of the code,. could also be use for particular number.
                    // Get the boring old TelephonyManager.

                          TelephonyManager telephonyManager =(TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
                      
                          // Get the getITelephony() method                          Class<?> classTelephony = Class.forName(telephonyManager.getClass().getName());
                          Method methodGetITelephony = classTelephony.getDeclaredMethod("getITelephony");
                   
                          // Ignore that the method is supposed to be private                          methodGetITelephony.setAccessible(true);
                   
                          // Invoke getITelephony() to get the ITelephony interface
                          Object telephonyInterface = methodGetITelephony.invoke(telephonyManager);
                   
                          // Get the endCall method from ITelephony
                          Class<?> telephonyInterfaceClass = Class.forName(telephonyInterface.getClass().getName());
                          Method methodEndCall = telephonyInterfaceClass.getDeclaredMethod("endCall");
                   
                          // Invoke endCall()
                          methodEndCall.invoke(telephonyInterface);
                    
                  }
                   
                }
               }
              catch (Exception ex)
              { // Many things can go wrong with reflection calls
                  ex.printStackTrace();
              }
             }
    }
}
Step 2: Manifest file
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.arpit.blockincomingcall"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
<!-- permission to be used to block the incoming calls -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
    <uses-permission android:name="android.permission.CALL_PHONE" />

    <uses-feature
        android:name="android.hardware.telephony"
        android:required="false" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

     <!—receiver -->
   <receiver android:name=".BlockCallReceiver" >
            <intent-filter android:priority="100" >
                <action android:name="android.intent.action.PHONE_STATE" >
                </action>
            </intent-filter>
        </receiver>

        <activity
            android:name="com.arpit.blockincomingcall.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>



Catch Me On: CreateAppFaster.com

0 comments:

Post a Comment