2013-01-16 21 views
1

我想阻止特定号码的来电。首先我尝试所有来电。 它运作良好。 但是当我尝试特定数量由下面的代码调用不拒绝,电话响起,我试图用我的Android手机..我想拒绝某个特定号码的来电,但它不起作用

 @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.v(TAG, "Receving...."); 
     String t1="01741297163",t2="08801741297163"; 
     TelephonyManager telephony = (TelephonyManager) 
     context.getSystemService(Context.TELEPHONY_SERVICE); 
     try { 
     Class c = Class.forName(telephony.getClass().getName()); 
     Method m = c.getDeclaredMethod("getITelephony"); 
     m.setAccessible(true); 
     Bundle b=intent.getExtras(); 
     num=b.getString(telephony.EXTRA_INCOMING_NUMBER); 
     if(num.equals(t1)||num.equals(t2)){ 
     telephonyService = (ITelephony) m.invoke(telephony); 
     //telephonyService.silenceRinger(); 
     telephonyService.endCall(); 
     } }catch (Exception e) { 
     e.printStackTrace(); 
     } 

我不知道来电号码的格式从获得电话管理员。

回答

1
import java.lang.reflect.Method; 

import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.media.AudioManager; 
import android.os.Bundle; 
import android.preference.PreferenceManager; 
import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 
import android.widget.Toast; 

import com.android.internal.telephony.ITelephony; 

public class PhoneCallStateListener extends PhoneStateListener {  

private Context context; 
public PhoneCallStateListener(Context context){ 
    this.context = context; 
} 


@Override 
public void onCallStateChanged(int state, String incomingNumber) { 
SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(context); 

switch (state) { 

    case TelephonyManager.CALL_STATE_RINGING:  

     String block_number = prefs.getString("block_number", null); 
      AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
      //Turn ON the mute 
    audioManager.setStreamMute(AudioManager.STREAM_RING, true);     
      TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
    try { 
    Toast.makeText(context, "in"+block_number, Toast.LENGTH_LONG).show(); 
    Class clazz = Class.forName(telephonyManager.getClass().getName()); 
    Method method = clazz.getDeclaredMethod("getITelephony"); 
    method.setAccessible(true); 
    ITelephony telephonyService = (ITelephony) method.invoke(telephonyManager);  
    //Checking incoming call number 
    System.out.println("Call "+block_number); 
    if (incomingNumber.equalsIgnoreCase("+91"+block_number)) { 
    //telephonyService.silenceRinger();//Security exception problem 
    telephonyService = (ITelephony) method.invoke(telephonyManager); 
    telephonyService.silenceRinger(); 
    System.out.println(" in "+block_number); 
    telephonyService.endCall(); 
    } 
    } catch (Exception e) { 
    Toast.makeText(context, e.toString(), Toast.LENGTH_LONG).show(); 
    } 
     //Turn OFF the mute  
    audioManager.setStreamMute(AudioManager.STREAM_RING, false); 
    break; 
    case PhoneStateListener.LISTEN_CALL_STATE: 
    } 
    super.onCallStateChanged(state, incomingNumber); 
} 
} 
0

为什么不尝试在日志中打印传入的电话号码,然后将其与您存储的号码进行比较?无论如何,您存储的电话号码t1t2,没有与他们的标准/国际代码。正确的电话号码(如印度)将

t1="+911741297163" 

为印度男女同校是+91

+0

我尝试用这种“8801741297163” +88国家代码,而不是作品,那么,我要为来电号码最后的11位和没有国家代码进行比较,然后它工作顺利。为什么我要显示来电号码。 –

+0

Put Log.v(TAG,“Receving num =”+ num);并检查正在打印什么 – Antrromet

0

您应该添加国家代码与数字。对印度说+91。试试吧!

相关问题