Não receber ligações enquanto a aplicação estiver aberta[RESOLVIDO]

Bom dia a todos!
Preciso bloquear todas as ligação enquanto a aplicação estiver aberta eu implementei o seguinte codigo


public class ReceberLigacao extends BroadcastReceiver {


	@Override
	public void onReceive(Context context, Intent intent) {
		System.out.println("Receving....");
        TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
        TelefoneListener customPhoneListener = new TelefoneListener(context);
        telephony.listen(customPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);      
	}
}

public class TelefoneListener extends PhoneStateListener {
	
	private Context context = null;
	
	public TelefoneListener(Context context) {
		this.context = context;
	}

	@Override
	public void onCallStateChanged(int state, String incomingNumber) {
		System.out.println("Current State is - " + state);
		System.out.println("number "+incomingNumber);
		switch (state) {
		case TelephonyManager.CALL_STATE_RINGING:
//nesse ponto eu deveria matar a ligação ??? 
		break;
		}
		super.onCallStateChanged(state, incomingNumber);
	}
	
	

}

eu pesquisei mto na internet, testei outros exemplos e nenhum funcionou, com este codigo acima eu consigo pegar o evento mais não consigo encerrar a ligação.

alguem sabe como fazer isso?

embora eu nunca tenha feito, tem um tópico aqui que o pessoal ta discutindo isso: http://stackoverflow.com/questions/599443/android-how-to-hang-up-outgoing-call ve se não te ajuda. (tem um cara falando sobre acessar usando reflection, seria a ultima opção que eu adotaria, pois vai deixar você totalmente dependente de uma implementação :x)

Entao eu vi esse topico so que essa classe com.android.internal.telephony.ITelephony não está acessivel para minha versão 2.1 resultando em falha da mesma forma

Desculpa me intrometer, mas qual a real necessidade de bloquear uma chamada?
Não seria mais fácil quando receber a chamada tratar a aplicação utilizando o clico de vida da activity? Não conheço a fundo o android, mas não sei se seria possível bloquear uma ligação.

Cara se não me engana.
O serviço de Ligação no Android e o serviço de mensagem dentro do sistema android tem prioridade “zero sobre todas” sendo assim.
Torna-se obrigatorio o recebimento da ligação ou de uma mensagem.
mas posso estar enganado.

são porque algumas pessoas que irão usar o app utilizaram o chip somente para 3G e não poderam usar nem para receber e nem para discar(não fui eu quem decidiu isso tenho só que implementar rsrsrs), e o recebimento de ligação atrapalha alguns serviços que rodam enquanto a aplicação é executada.

Por que não compra um chip 3G only (se existe) ? Ou entao nao passa o numero para ninguem?

Boa pergunta!! ahuahau, pq eu estou utilizando um serviço que não deixa sair da aplicação sem autorização, ai o cliente pediu para não deixar receber ligações tb, eu pensei em varias dessas hipoteses todas sem sucesso =(

tambem tenho quase certeza que isso não é possivel. a ligação tem Prioridade. No máximo vc conseguiria exibir um alerta para o usuário finalizar a ligação.
Em java Me eu tenho certeza de que não é possível.

Nem sei se é possível mas, não tem como fazer uma app que substitua o receptor de chamadas padrão?

Você criaria uma app que “entrasse na frente” do padrão, e desligava a chamada sem atender.

Vou precisar de algo semelhante em breve, mas ainda não corri atrás pra ver se é possível.

Bom se for pra fazer uma gambiarra.

instala um CallBlocker e manda blockear Geral Mensagem Ligação e tudo mais…

Extreme Call Blocker Droid v22.8

Entre as funções do app temos:

  • Bloqueador de chamadas (desconhecidos, anônimas, todas, blacklist)
  • Blacklist e Whitelist
  • Vários modos de bloqueio
  • Bloqueio de SMS
  • Auto resposta para SMS bloqueado
  • E muito mais…

Download - http://db.tt/KkqsxOW

Mirror - http://www.4shared.com/file/PInbn9nn/Extreme_Call_Blocker_Droid_v22.html

[quote=AbelBueno]Nem sei se é possível mas, não tem como fazer uma app que substitua o receptor de chamadas padrão?

Você criaria uma app que “entrasse na frente” do padrão, e desligava a chamada sem atender.

Vou precisar de algo semelhante em breve, mas ainda não corri atrás pra ver se é possível.[/quote]

Cara sei não…
Leva a mal não a brincadeira.

Acho que deve ser iso.
redeparede.com.br/contagem/servicos/informatica/posts/chip-claro-ativado-plano-internet-pre-paga-pagando-so-12-00-por-mes--986698

Achei a solução to postando aqui para fins de conhecimento

	@SuppressWarnings("rawtypes")
	public static void endCall() {
        try {
            Class serviceManagerClass = Class.forName("android.os.ServiceManager");
            Method getServiceMethod = serviceManagerClass.getMethod("getService", String.class);
            Object phoneService = getServiceMethod.invoke(null, "phone");

            Class ITelephonyClass = Class.forName("com.android.internal.telephony.ITelephony");
            Class ITelephonyStubClass = null;
            for (Class clazz : ITelephonyClass.getDeclaredClasses()) {
                if (clazz.getSimpleName().equals("Stub")) {
                    ITelephonyStubClass = clazz;
                    break;
                }
            }
            if (ITelephonyStubClass != null) {
                Class IBinderClass = Class.forName("android.os.IBinder");
                Method asInterfaceMethod = ITelephonyStubClass.getDeclaredMethod("asInterface", IBinderClass);
                Object iTelephony = asInterfaceMethod.invoke(null, phoneService);
                if (iTelephony != null) {
                    Method endCallMethod = iTelephony.getClass().getMethod("endCall");
                    System.out.println("Encerrando chamada...");
                    endCallMethod.invoke(iTelephony);        
                } else {
                	Util.printLogWarning("Serviço de telefonia não disponivel: ");
                }
            } else {
                Util.printLogWarning("Não foi localizada a Classe ITelephony. A ligação não será encerrada.");
            }
        } catch (Exception e) {
            e.printStackTrace();
            Util.printLogError("Erro ao encerrar a Ligação: ", e);
        } 
    }

vlw a todos que responderam!

Danilo, sou novo em android, estou com o mesmo problema e sua solução resolveu o mesmo, mas onde implemento o código que vc postou?
Obrigado pela atenção dispensada.

então você tem que implementar o listener que pega a ligação ai voce joga esse metodo dentro do listener, eu não tenho o link aqui mais é só você jogar no google ou no docs da api do android.

Danilo, perdoe minha ignorância, ainda não consegui evoluir sobre isso, se puder me ajudar, agradeço.
Seguinte: preciso que quando minha aplicação esteja executando não entre nenhuma ligação, te pergunto, já que vc tem experiência no assunto, essa é a melhor forma de fazer?