黑名單短信和通話

public class BlackNameService extends Service {
    private SmsReceiver mReceiver;
    private TelephonyManager mTm;
    private BlackNamePhoneStateListener mListener;

    @Override
    public void onCreate() {
        //4.4 失效
        mReceiver = new SmsReceiver();
        IntentFilter filter = new IntentFilter();
        filter.addAction("android.provider.Telephony.SMS_RECEIVED");
        registerReceiver(mReceiver, filter);
        //
        mTm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
        mListener = new BlackNamePhoneStateListener();
        mTm.listen(mListener, PhoneStateListener.LISTEN_CALL_STATE);
        super.onCreate();
    }

    class BlackNamePhoneStateListener extends PhoneStateListener {
        @Override
        public void onCallStateChanged(int state, String incomingNumber) {
            switch (state) {
                case TelephonyManager.CALL_STATE_RINGING:
                    Log.i(TAG, "onCallStateChanged: " + incomingNumber);
                    endCall();
                    break;
            }
            super.onCallStateChanged(state, incomingNumber);
        }
    }

    private void endCall() {
        //ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE));
        //ServiceManager此類android對開發者隱藏,因此不能去直接調用其方法,須要反射調用
        try {
            //1,獲取ServiceManager字節碼文件
            Class<?> clazz = Class.forName("android.os.ServiceManager");
            //2,獲取方法
            Method method = clazz.getMethod("getService", String.class);
            //3,反射調用此方法
            IBinder iBinder = (IBinder) method.invoke(null, Context.TELEPHONY_SERVICE);
            //4,調用獲取aidl文件對象方法
            ITelephony iTelephony = ITelephony.Stub.asInterface(iBinder);
            //5,調用在aidl中隱藏的endCall方法
            iTelephony.endCall();
            Log.i(TAG, "endCall: ");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    class SmsReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.i(TAG, "onReceive: sms---------");
            Object[] pdus = (Object[]) intent.getExtras().get("pdus");
            for (Object obj : pdus) {
                SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) obj);
                String number = smsMessage.getOriginatingAddress();
                Log.i(TAG, "onReceive: number " + number);
            }
            abortBroadcast();
        }
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        if (mReceiver != null) {
            unregisterReceiver(mReceiver);
        }
        if (mListener != null && mTm != null) {
            mTm.listen(mListener, PhoneStateListener.LISTEN_NONE);
        }
        super.onDestroy();
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}
相關文章
相關標籤/搜索