vendredi 14 août 2015

Android : in coming sms in number exist in sqlite, not view notification

I got sms code block when incoming sms will bring up a notification for incoming number in sqlite, but I flipped difficulties, if any incoming sms and the number is already in sqlite then it will not bring up the notification

public class SmsReceiver extends BroadcastReceiver  {

    public static int MSG_TPE = 0;
    private String number;

    @Override
    public void onReceive(Context context, Intent intent) {
        Conatclist ready = new Conatclist(context);
        final String TAG = "Number";
        String action = intent.getAction();
        if (action.equals(AppConstants.SMS_RECEIVED_ACTION)) {
            Bundle bundle = intent.getExtras();
            SmsMessage[] msgs = null;
            String message = "";
            String date = AppUtils.getDate();
            String time = AppUtils.getTime();
            String status = AppUtils.getStatus();
            if (bundle != null) {
                Object[] pdus = (Object[]) bundle.get("pdus");
                msgs = new SmsMessage[pdus.length];
                for (int i = 0; i < msgs.length; i++) {
                    msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
                    number = msgs[i].getOriginatingAddress();
                    message += msgs[i].getMessageBody().toString();
                    message += "\n";
                }
                if (SettingsPreferences.isBlockAllSms(context)) {
                    ArrayList<BlockItem> block_number = CMBDataProvider
                            .getBlackList(context);
                    if (!TextUtils.isEmpty(message)
                            && !TextUtils.isEmpty(number)
                            && block_number != null
                            && block_number.size() > 0) {
                        message = message.trim();
                        //in exist in db 
                        for (int i = 0; i < block_number.size(); i++) {
                            if (number.contains(block_number.get(i).getNumber())) {
                            //notification gcm incoming sms     
                            if (SettingsPreferences.isNotificationShow(context)) {
                                    AppUtils.generateNotification(
                                            context, "Jualan: "+number , false);
                                }
                                break;
                            }
                        }
                    } else {
                        try {
                            if (ready.contactExists(context, number)) {

                            } else {
                                this.abortBroadcast();
                                CallMessageItem item = new CallMessageItem();
                                item.setDate(date);
                                item.setMessage(message);
                                item.setNumber(number);
                                item.setTime(time);
                                item.setStatus(status);
                                item.setType(AppConstants.TYPE_MESSAGE);
                                CMBDataProvider.addCallMessage(context, item);
                                if (SettingsPreferences.isNotificationShow(context)) {
                                    AppUtils.generateNotification(
                                            context, "SMS Block: " + number, false);
                                }
                                //String infosms ="msisdn="+number+"&message="+URLEncoder.encode(message);
                                new MyAsyncTask().execute(number, message);
                                this.abortBroadcast();
                            }
                        } catch (Exception e) {

                        }
                    }
                }
            }
        }
    }
    //cek nomor
    public class Conatclist extends AsyncTask<String, Void, Boolean> {

        public Context context;

        public Conatclist(Context context) {
            // TODO Auto-generated constructor stub
            this.context = context;
        }

        @Override
        protected Boolean doInBackground(String... strings) {
            try {
                return contactExists(context, strings[0]);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return false;
        }

        // The argument result is return by method doInBackground
        @Override
        protected void onPostExecute(Boolean result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);

            // You can handle the result here
        }

        public boolean contactExists(Context context, String number) throws Exception {
            Uri lookupUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));

            String[] mPhoneNumberProjection = { ContactsContract.PhoneLookup._ID, ContactsContract.PhoneLookup.NUMBER,
                    ContactsContract.PhoneLookup.DISPLAY_NAME };

            Cursor cur = context.getContentResolver().query(lookupUri, mPhoneNumberProjection, null, null, null);
            try {
                if (cur.moveToFirst()) {
                    // if contact are in contact list it will return true
                    return true;
                }
            } finally {
                if (cur != null)
                    cur.close();
            }
            // if contact are not match that means contact are not added
            return false;
        }
    }

}

Aucun commentaire:

Enregistrer un commentaire