Recuperar o número de telefone da chamada recebida no Android
-
13-09-2019 - |
Pergunta
Eu gostaria de recuperar phonenumber da chamada e fazer alguma coisa com ele, como o do em http://blog.whitepages.com/2009/02/27/caller-id-by-whitepages-a-new-android-app-that-puts-telemarketers-on-alert/
Você poderia por favor me ajude, porque eu não consigo encontrar nenhuma informação sobre isso. Onde posso começar e como faço para se apossar do phonenumber?
Ok, então atualmente meus olhares código como abaixo. Quando eu colocar a chamada do CustomBroadcastReceiver pega e a mensagem de log é impresso. I pode recuperar o número de telefone a partir do pacote. Mas! Eu não posso começar hte CustomPhoneStateListener ao trabalho. Como você pode ver eu registrei minha customPhoneState ouvinte para o receptor, mas a mensagem de log nunca se de impressos a partir da classe CustomPhoneStateListener. O que estou a minha falta aqui? É o meu pensamento correto?
<receiver android:name=".CustomBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
</application>
<uses-sdk android:minSdkVersion="5" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
public class CustomPhoneStateListener extends PhoneStateListener {
private static final String TAG = "CustomPhoneStateListener";
public void onCallStateChange(int state, String incomingNumber){
Log.v(TAG, "WE ARE INSIDE!!!!!!!!!!!");
Log.v(TAG, incomingNumber);
switch(state){
case TelephonyManager.CALL_STATE_RINGING:
Log.d(TAG, "RINGING");
break;
}
}
public class CustomBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = "CustomBroadcastReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.v(TAG, "WE ARE INSIDE!!!!!!!!!!!");
TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
CustomPhoneStateListener customPhoneListener = new CustomPhoneStateListener();
telephony.listen(customPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
Bundle bundle = intent.getExtras();
String phoneNr= bundle.getString("incoming_number");
Log.v(TAG, "phoneNr: "+phoneNr);
}
Solução
Use PhoneStateListener
. Ele tem um onCallStateChanged
manipulador; um dos argumentos fornecidos você vai conseguir é um String
contendo o número de telefone de entrada.
Outras dicas
Seu método substituído na CustomPhoneStateListener
deve ser chamado onCallStateChanged()
(e não onCallStateChange()
).
Este teria sido manchado pelo compilador Java se você teria tido a anotação @Override
, como você tem para onReceive()
.