2

I'm trying to block incoming call in android. I have this BroadcastReceiver but it handles the incoming call but does not block incoming call on my android 2.3.6 phone(didn't try on other versions). here is my receiver:

public class PhoneCallReceiver extends BroadcastReceiver {
    Context context = null;
    private static final String TAG = "Phone call";
    private ITelephony telephonyService;

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.v(TAG, "Receving....");

        TelephonyManager telephony = (TelephonyManager) context
                .getSystemService(Context.TELEPHONY_SERVICE);
        try {
            Class c = Class.forName(telephony.getClass().getName());
            Method m = c.getDeclaredMethod("getITelephony");
            m.setAccessible(true);
            telephonyService = (ITelephony) m.invoke(telephony);
            // telephonyService.silenceRinger();

            telephonyService.endCall();
        } catch (Exception e) {
            Log.v(TAG, "failed....");
            e.printStackTrace();
        }    
    }    
}

and the ITelephony

package com.callblocker.mk;

interface ITelephony {

  boolean endCall();

  void answerRingingCall();

  void silenceRinger();

}
4

1 回答 1

1

在广播接收器中调用此方法

 public static void disconnectPhoneItelephony(Context context) {
     ITelephony telephonyService;
     Log.v(TAG, "Now disconnecting using ITelephony....");
      TelephonyManager telephony = (TelephonyManager) 
      context.getSystemService(Context.TELEPHONY_SERVICE);  
      try {
          Log.v(TAG, "Get getTeleService...");
          Class c = Class.forName(telephony.getClass().getName());
          Method m = c.getDeclaredMethod("getITelephony");
          m.setAccessible(true);
          telephonyService = (ITelephony) m.invoke(telephony);
            telephonyService.endCall();
      } catch (Exception e) {
       e.printStackTrace();
       Log.e(TAG,
               "FATAL ERROR: could not connect to telephony subsystem");
       Log.e(TAG, "Exception object: " + e);
      }
 }

//广播接收器

 @Override
public void onReceive(Context context, Intent intent) {


    if (!intent.getAction().equals("android.intent.action.PHONE_STATE")) 
         return;
     else {

         disconnectPhoneItelephony(context);
}}

//显现

 <!-- BLOCK CALL -->
 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
 <uses-permission android:name="android.permission.CALL_PHONE" />
 <uses-permission android:name="android.permission.PROCESS_INCOMING_CALLS" />

<receiver android:name="receiver.CallReceiver" >
        <intent-filter android:priority="999" >
            <action android:name="android.intent.action.PHONE_STATE" />
        </intent-filter>
     </receiver>
于 2014-07-01T13:24:15.483 回答