powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / создание BroadcastReceiver для антиспама
10 сообщений из 10, страница 1 из 1
создание BroadcastReceiver для антиспама
    #38573303
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день ! решил создать для себя сервис - антиспам - простое приложение для android которое будет автоматически удалять смс и блокировать звонки из черного списка.

прочитал все описания и создал простой проект .

но видимо что то еще не понял : сообщения все равно приходят .

вопросы :
1) как игнорировать смс из черного списка?
2) как игнорировать звонки из черного списка?
3) как не отправлять смс на эти номера?
4) как не соверщать звонки на них?


AndroidManifest.xml

тут как я понял нужно обязательно указывать Activity - потому что по умолчанию просто сервис создать нельзя , он не запуститься ...

дал все права

указал что android:priority="999" самый высокий , чтобы смс больше никто перехватить не смог.

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.doctorweb"
    android:versionCode="1"
    android:versionName="1.2">

    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" />

    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name">
        <activity android:name=".DoctorActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name=".SMSReceiver"
            android:permission="android.permission.BROADCAST_SMS">
            <intent-filter android:priority="999" >
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>
    </application>
</manifest>



Нужна ли активность ? может как - то можно без нее ?
DoctorActivity
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
package com.example.doctorweb;

import android.app.Activity;
import android.os.Bundle;

public class DoctorActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }
}



BroadcastReceiver

abortBroadcast(); - провиливаем смс и не даем его получать и на показываем ...

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
package com.example.doctorweb;


        import android.content.BroadcastReceiver;
        import android.content.Context;
        import android.content.Intent;
        import android.os.Bundle;
        import android.util.Log;


public class SMSReceiver extends BroadcastReceiver {


    @Override
    public void onReceive(Context context, Intent intent) {

        // TODO Auto-generated method stub
        //Intent intent2 = new Intent(context, SampleActivity.class);
        //intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        //context.startActivity(intent2);

        Bundle bundle = intent.getExtras();
        Object[] pdus = (Object[]) bundle.get("pdus");

        if (pdus.length == 0) {
            return;
        }
        Sms sms = Sms.fromPdus(pdus, context);

        try {
            if (Sms.isSenderInBlackList(sms.getSenderOriginatingAddress())) {
                abortBroadcast();
            }
            if (Sms.isSenderInBlackList(sms.getSenderDisplayOriginatingAddress())) {
                abortBroadcast();
            }

        } finally {
        }
    }
}


isSenderInBlackList - черный список номеров
для простоты читаем просто из массива, потом просто вынести в файл для гибкой правки
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
package com.example.doctorweb;

        import android.content.Context;
        import android.os.Build;
        import android.telephony.SmsMessage;

public class Sms {

    private String senderOriginatingAddress;
    private String senderDisplayOriginatingAddress;

    public Sms() {
    }

    public static Sms fromPdus(Object[] pdus, Context context) {
        Sms result = new Sms();

        SmsMessage first = SmsMessage.createFromPdu((byte[]) pdus[0]);
        result.senderOriginatingAddress = first.getOriginatingAddress();
        result.senderDisplayOriginatingAddress = first.getDisplayOriginatingAddress();

        return result;
    }

    private static final String[] blackList = new String[]{"9555985515"};

    public static boolean isSenderInBlackList(String sender) {
        if (sender != null) {
            for (String string : blackList) {
                if (sender.contains(string)) {
                    return true;
                }
            }
        }
        return false;
    }

    public String getSenderOriginatingAddress() {
        return senderOriginatingAddress;
    }

    public void setSenderOriginatingAddress(String senderOriginatingAddress) {
        this.senderOriginatingAddress = senderOriginatingAddress;
    }

    public String getSenderDisplayOriginatingAddress() {
        return senderDisplayOriginatingAddress;
    }

    public void setSenderDisplayOriginatingAddress(String senderDisplayOriginatingAddress) {
        this.senderDisplayOriginatingAddress = senderDisplayOriginatingAddress;
    }
}



...
Рейтинг: 0 / 0
создание BroadcastReceiver для антиспама
    #38573394
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тестирую на nexus 4 в эмуляторе и в жизни.

может быть у низкий приоритет у приложения ? android:priority="999"

больше мыслей нет ... :(
...
Рейтинг: 0 / 0
создание BroadcastReceiver для антиспама
    #38573474
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А есть отладчик, логгирование?
...
Рейтинг: 0 / 0
создание BroadcastReceiver для антиспама
    #38573780
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА есть отладчик, логгирование?
Да все ок!

Более того :

отправляю смс через telnet localhost 5554
sms send +79095990053 test

в эмулятор приходить - по брякам ходит - условие фильтрации выполняется , функция abortBroadcast(); вызывается в каждом ифе ...

и после этого смс сообщение показывается и попадает во входящие ...

UPD

тут предложили выставить флаг
http://4pda.ru/forum/index.php?showtopic=456422&st=0

Код: java
1.
2.
3.
       
intent.addFlags(32);
abortBroadcast();
...
Рейтинг: 0 / 0
создание BroadcastReceiver для антиспама
    #38573828
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала было-бы не плохо проверять тип сообщения:
Код: java
1.
2.
String MSG_TYPE=intent.getAction();
        if(MSG_TYPE.equals("android.provider.Telephony.SMS_RECEIVED"))


Далее, максимальное значение integer = 2147483647 :) это про priority

На форуме имеется раздел по андроиду.

Atum12) как игнорировать звонки из черного списка?
Начиная с 2.3 с телефонной частью могут работать только системные приложения. Но находятся "гении" которые путем эмуляции кнопок сбрасывают звонки.
...
Рейтинг: 0 / 0
создание BroadcastReceiver для антиспама
    #38573867
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanДля начала было-бы не плохо проверять тип сообщения:
Код: java
1.
2.
String MSG_TYPE=intent.getAction();
        if(MSG_TYPE.equals("android.provider.Telephony.SMS_RECEIVED"))


Далее, максимальное значение integer = 2147483647 :) это про priority

На форуме имеется раздел по андроиду.

Atum12) как игнорировать звонки из черного списка?
Начиная с 2.3 с телефонной частью могут работать только системные приложения. Но находятся "гении" которые путем эмуляции кнопок сбрасывают звонки.


ок! со звонками еще предстоит разобраться ...

а по поводу приоритета - в доках описано :

The value must be an integer, such as "100". Higher numbers have a higher priority. The default value is 0. The value must be greater than -1000 and less than 1000.


android:priority
The priority that should be given to the parent component with regard to handling intents of the type described by the filter. This attribute has meaning for both activities and broadcast receivers:
It provides information about how able an activity is to respond to an intent that matches the filter, relative to other activities that could also respond to the intent. When an intent could be handled by multiple activities with different priorities, Android will consider only those with higher priority values as potential targets for the intent.
It controls the order in which broadcast receivers are executed to receive broadcast messages. Those with higher priority values are called before those with lower values. (The order applies only to synchronous messages; it's ignored for asynchronous messages.)
Use this attribute only if you really need to impose a specific order in which the broadcasts are received, or want to force Android to prefer one activity over others.

The value must be an integer, such as "100". Higher numbers have a higher priority. The default value is 0. The value must be greater than -1000 and less than 1000.

Also see setPriority().


что касаемо нажатия кнопок - получается что единственный путь - это удалять эти сообщения из входящих и их уведомления ...но это как то криво.
...
Рейтинг: 0 / 0
создание BroadcastReceiver для антиспама
    #38573938
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раз приоритет не решение, то погугли на тему content://sms/inbox и иже с ними. Можно так же перебрать все сообщения и/или удалить.
...
Рейтинг: 0 / 0
создание BroadcastReceiver для антиспама
    #38575075
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanРаз приоритет не решение, то погугли на тему content://sms/inbox и иже с ними. Можно так же перебрать все сообщения и/или удалить.

очень кривое решение ... мне оно очень не нравиться ...

:(
...
Рейтинг: 0 / 0
создание BroadcastReceiver для антиспама
    #38575086
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1очень кривое решение ... мне оно очень не нравиться ...
Все стандартные отмел... Придется изобретать свой велосипед.

Хотя, чем оно может не нравиться?
...
Рейтинг: 0 / 0
создание BroadcastReceiver для антиспама
    #38576552
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanAtum1очень кривое решение ... мне оно очень не нравиться ...
Все стандартные отмел... Придется изобретать свой велосипед.

Хотя, чем оно может не нравиться?

Тем что тут уже нужно добавить права на чтение/запись смс приложению .
Тем что смс и звонки будут проходить , уведомления будут появляться , сигналить о поступлении нового звонка смс итд...

я буду лезть в телефон узнать откуда пришло смс и ничего не видеть ...
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / создание BroadcastReceiver для антиспама
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]