Não receber ligações enquanto a aplicação estiver aberta[RESOLVIDO]
15 respostas
D
danilorangelmg
Bom dia a todos!
Preciso bloquear todas as ligação enquanto a aplicação estiver aberta eu implementei o seguinte codigo
publicclassReceberLigacaoextendsBroadcastReceiver{@OverridepublicvoidonReceive(Contextcontext,Intentintent){System.out.println("Receving....");TelephonyManagertelephony=(TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);TelefoneListenercustomPhoneListener=newTelefoneListener(context);telephony.listen(customPhoneListener,PhoneStateListener.LISTEN_CALL_STATE);}}publicclassTelefoneListenerextendsPhoneStateListener{privateContextcontext=null;publicTelefoneListener(Contextcontext){this.context=context;}@OverridepublicvoidonCallStateChanged(intstate,StringincomingNumber){System.out.println("Current State is - "+state);System.out.println("number "+incomingNumber);switch(state){caseTelephonyManager.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.
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)
D
danilorangelmg
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
M
MauNunes
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.
C
C_k
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.
D
danilorangelmg
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.
M
Marky.Vasconcelos
Por que não compra um chip 3G only (se existe) ? Ou entao nao passa o numero para ninguem?
D
danilorangelmg
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 =(
J
jonathan_Coelho
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.
A
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.
C
C_k
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)
Achei a solução to postando aqui para fins de conhecimento
@SuppressWarnings("rawtypes")publicstaticvoidendCall(){try{ClassserviceManagerClass=Class.forName("android.os.ServiceManager");MethodgetServiceMethod=serviceManagerClass.getMethod("getService",String.class);ObjectphoneService=getServiceMethod.invoke(null,"phone");ClassITelephonyClass=Class.forName("com.android.internal.telephony.ITelephony");ClassITelephonyStubClass=null;for(Classclazz:ITelephonyClass.getDeclaredClasses()){if(clazz.getSimpleName().equals("Stub")){ITelephonyStubClass=clazz;break;}}if(ITelephonyStubClass!=null){ClassIBinderClass=Class.forName("android.os.IBinder");MethodasInterfaceMethod=ITelephonyStubClass.getDeclaredMethod("asInterface",IBinderClass);ObjectiTelephony=asInterfaceMethod.invoke(null,phoneService);if(iTelephony!=null){MethodendCallMethod=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(Exceptione){e.printStackTrace();Util.printLogError("Erro ao encerrar a Ligação: ",e);}}
vlw a todos que responderam!
F
fabiolira
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.
D
danilorangelmg
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.
F
fabiolira
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?