Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Vladislav Král:7.7.2016 10:22

Ahoj vsem

Mám za úkol vytvořit SMS APP pro skrytí vybraných čísel tak aby nepropadli dále do defaultní SMS APP, tento ukol je jednoduchy pro AND API < 19 používám tento kod

public class SMSReceiver extends BroadcastReceiver {
    public static String TAG = "SMSReceiver";
    ToneGenerator tg = new ToneGenerator(AudioManager.STREAM_MUSIC, 100);

    public SMSReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        SMS_Throttle.VytvorDatabazi(context);
        String act = intent.getAction();
        Log.d(TAG, act);
        if (Dtb.HodnotaZNastaveniINT(ENastaveni.START_SKRYTE_SLUZBY, 1) == 1) {
            Bundle bundle = intent.getExtras();
            SmsMessage[] msgs = null;
            boolean isAbort = false;
            if (bundle != null) {
                Object[] pdus = (Object[]) bundle.get("pdus");
                msgs = new SmsMessage[pdus.length];
                String lst[][] = SMS_Throttle.getTlfCisla(context);
                String[] l = new String[lst.length];
                for (int j = 0; j < lst.length; j++)
                    l[j] = lst[j][0];
                for (int i = 0; i < msgs.length; i++) {
                    msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
                    for (int j = 0; j < l.length; j++) {
                        if (msgs[i].getOriginatingAddress().endsWith(l[j])) {
                            if (Dtb.HodnotaZNastaveniINT(ENastaveni.PRISLA_AKTIVITA, 0) == 1) {
                                tg.startTone(ToneGenerator.TONE_DTMF_5, 30);
                                Toast.makeText(context, msgs[i].getMessageBody(), Toast.LENGTH_LONG).show();
                            }
                            isAbort = true;
                            Dtb.UlozActivitu(l[j], msgs[i].getMessageBody(), EKomunType.RECEIVE_SMS);
                        }
                    }
                }
            }
            if (isAbort) {
                abortBroadcast();
            }
        }
    }
}

Duležité:

v nižších verzích API perfektně zabere abortBroadcast().
Tedy pokud číslo odesílatele JE uvedeno v mém seznamu viz podmínka if (msgs[i].getO­riginatingAddres­s().endsWith(l[j])) { pak tato SMS BUDE uložena v mé databázi a NEPROPADNE do defaultní APP pro SMS messaging.

Pokud číslo NENÍ uvedené v mém seznamu pak se do mé databáze uložit NESMÍ ale MUSI propadnout do defaultní APP pro messaging.

Problem vznikl v API >= 19 kde ten abortbroadcast vůbec nefunguje a navic byly odstraněny práva na možnost výmazu vybraných SMS z defaultní SMS APP.

Poradí někdo jak řešit problem kdy POTŘEBUJI využít můj receiver SMS a současně ten defaultní?
Již jsem pročetl snad vše 'SMS pro KITKAT' ale i celou řadu příspěvků na stackoverflow ale nikde jsem na řešení této myšlenky nenarazil.

Díky za každou myšlenku

 
Odpovědět
7.7.2016 10:22
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 1 zpráv z 1.