Когда звонит телефон, я сравниваю номер телефона с номерами в базе данных моего сервера и записываю имя звонящего. Думай как приложение Callerid.
Я делаю то, что хочу, когда звонит телефон. Тем не менее, приложение завершается сбоем после завершения телефонного звонка.
Я указал строку, в которой происходит сбой приложения, в виде строки комментария «строка сбоя» в коде.
public class CallBarring extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (!intent.getAction().equals("android.intent.action.PHONE_STATE"))
return;
else {
//popup operations...
}
// Fetch the number of incoming call
telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
listener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
String stateString = "N/A";
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
stateString = "Idle";
dialog.dismiss();
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
stateString = "Off Hook";
dialog.dismiss();
break;
case TelephonyManager.CALL_STATE_RINGING:
stateString = "Ringing";
dialog.show();
break;
}
}
};
// See the contact's phone number
telephonyManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
telephonyManager.listen(new PhoneStateListener(){
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
System.out.println("incomingNumber : "+incomingNumber);
fetchUserInfo(incomingNumber);
}
},PhoneStateListener.LISTEN_CALL_STATE);
}
private void fetchUserInfo(String phoneNumber){
Call<NumberInfo> call = numberAPI.getPhoneNumber(phoneNumber);
call.enqueue(new Callback<NumberInfo>() {
@Override
public void onResponse(Call<NumberInfo> call, Response<NumberInfo> response) {
/* crash line*/ numberInfo.setNames(response.body().getNames());
incomingNumberName.setText(numberInfo.getNames().toString());
}
@Override
public void onFailure(Call<NumberInfo> call, Throwable t) {
}
});
}