Я хочу заблокировать все входящие / исходящие вызовы для пользователей моего приложения, кроме определенного белого списка.Я определил получателя.Проблема заключается в том, что когда пользователь набирает номер телефона, который не существует в белом списке, он в первый раз может позвонить, а после первого звонка звонок заблокирован.Он должен всегда блокировать вызов черного списка.Ниже мой приемник в манифесте.Этот код прекрасно работает для входящего звонка и блокирует номера черного списка. Я не знаю причину:
public void onReceive(final Context context, Intent intent) {
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
this.context = context;
if(!intent.getAction().equals("android.intent.action.PHONE_STATE")){
return;
}
telephony = (TelephonyManager) context.getApplicationContext()
.getSystemService(Context.TELEPHONY_SERVICE);
try {
Class c = Class.forName(telephony.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
telephonyService = (ITelephony) m.invoke(telephony);
} catch (Exception e) {
e.printStackTrace();
}
try {
databaseHelper=OpenHelperManager.getHelper(context, DatabaseHelper.class);
connectionRestrictions = databaseHelper.getConnectionRestrictionDao();
} catch (SQLException ex) {
}
telephony.listen(new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
if(!incomingNumber.equals("") && incomingNumber != null ){
switch (state) {
case TelephonyManager.CALL_STATE_RINGING:
if ((incomingNumber != null)) {
try {
inComingCallAuthorization(((ParentalControl)context.getApplicationContext()).makeCheckPhoneNumber(incomingNumber));
} catch (RemoteException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
break;
case TelephonyManager.CALL_STATE_IDLE:
// your logic here
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
try {
outGoinCallAuthorization(((ParentalControl)context.getApplicationContext()).makeCheckPhoneNumber(incomingNumber));
} catch (RemoteException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
}
break;
default:
break;
}
}
super.onCallStateChanged(state, incomingNumber);
}
}, PhoneStateListener.LISTEN_CALL_STATE);
}
манифест:
<receiver
android:name=".reciver.CallServiceReciver">
<intent-filter android:priority="2147483647">
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>