Я хочу заблокировать исходящие и входящие звонки, если телефонный номер отсутствует в белом списке приложений и имеется более одной широковещательной рассылки, а у первого пустой входящий номер, так что звонок не блокируется и в большинстве случаев работает нормально, потому чтополучатель получает входящий номер.Почему это пустой номер и как я могу обработать пустую трансляцию?
public class CallServiceReciver extends BroadcastReceiver {
private TelephonyManager telephony;
private ITelephony telephonyService;
private Context context;
public void onReceive(final Context context, Intent intent) {
this.context = context;
if(!intent.getAction().equals("android.intent.action.PHONE_STATE")){
return;
}
telephony = (TelephonyManager) context.getApplicationContext()
.getSystemService(Context.TELEPHONY_SERVICE);
telephony.listen(new TellListener(), PhoneStateListener.LISTEN_CALL_STATE);
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();
}
private class TellListener extends PhoneStateListener {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_RINGING:
if (incomingNumber == null || incomingNumber.equals("")) {
return;
}
try {
inComingCallAuthorization(((ParentalControl)context.getApplicationContext()).makeCheckPhoneNumber(incomingNumber));
} catch (RemoteException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
break;
case TelephonyManager.CALL_STATE_IDLE:
Log.i("anarestan", "Call End" + incomingNumber);
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
if (incomingNumber == null || incomingNumber.equals("")) {
return;
}
try {
Log.i(TAG, "onCallStateChanged: offhook");
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);
}
}
манифест
<receiver android:name=".reciver.CallServiceReciver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="2147483647">
<action android:name="android.intent.action.PHONE_STATE" />
<action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
</intent-filter>
</receiver>