Страница 1 из 2

Перехват смс с определенным содержанием

Добавлено: 17 июн 2012, 14:38
good
Всем привет.Совсем недавно решил попробовать себя в программировании под Android.Пробую писать приложение, суть которого в том, что оно перехватывает все входящие сообщения и если какое-либо сообщение удовлетворяет некоторым условиям, то оно тут же удаляется.Пробовал сделать так:
Активити

Код: Выделить всё

public class MessageReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
             Bundle pudsBundle = intent.getExtras();
             Object[] pdus = (Object[]) pudsBundle.get("pdus");
             SmsMessage messages =SmsMessage.createFromPdu((byte[]) pdus[0]);    
             Log.i(TAG,  messages.getMessageBody());
                 if(messages.getMessageBody().contains("Hi")) {
                     abortBroadcast();
                 }
    }
манифест

Код: Выделить всё

 <receiver android:name="com.encima.smsreceiver.MessageReceiver" android:exported="true">
    <intent-filter android:priority="999">
        <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
    </intent-filter>
Не работает.Что я делаю не так?

Re: Перехват смс с определенным содержанием

Добавлено: 18 июн 2012, 09:20
damager82
good писал(а):Не работает.Что я делаю не так?
Права в манифесте прописали?
android.permission.RECEIVE_SMS

Re: Перехват смс с определенным содержанием

Добавлено: 18 июн 2012, 10:18
good
Вот,что у меня в активити:

Код: Выделить всё

package com.sms.MessageReceiver;

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

public class MessageReceiverActivity extends BroadcastReceiver {
	private static final String TAG = null;

	public void onReceive(Context context, Intent intent) {
			 Bundle pudsBundle = intent.getExtras();
			 Object[] pdus = (Object[]) pudsBundle.get("pdus");
			 SmsMessage messages =SmsMessage.createFromPdu((byte[]) pdus[0]);  
			 Log.i(TAG,  messages.getMessageBody());
				 if(messages.getMessageBody().contains("111")) {
					 abortBroadcast();
				 }
	};
}
и в манифесте:

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.sms.MessageReceiver"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="7" />
    
<uses-permission android:name="android.permission.RECEIVE_SMS" />

           <activity

            android:label="@string/app_name"

            android:name=".MessageReceiverActivity" >

             <receiver android:name=".MessageReceiverActivity" android:exported="true">

    <intent-filter android:priority="999">

        <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>

    </intent-filter>
</receiver>
</activity>
</manifest>

Re: Перехват смс с определенным содержанием

Добавлено: 18 июн 2012, 10:59
damager82
В манифесте у вас странности ...
receiver внутри activity, а должны быть на одном уровне
И атрибут android:name у них обоих одинаковый ...

MessageReceiverActivity - это не активити, это ресивер. Если ваше приложение не использует активити, то и в манифесте про activity ничего не должно быть.

Re: Перехват смс с определенным содержанием

Добавлено: 18 июн 2012, 13:34
good
Удалил активити в манифесте,все равно не работает(смс проходят).Не могли бы вы взглянуть мой проект под эклипс,если вам не трудно конечно? ;) Проект под эклипс http://www.sendspace.com/file/c7vg9o

Re: Перехват смс с определенным содержанием

Добавлено: 19 июн 2012, 09:16
damager82
good писал(а):Проект под эклипс http://www.sendspace.com/file/c7vg9o
Пофиксил: http://www.sendspace.com/file/v1w6bk
Манифест был некорректный. Там еще не было тэга Application.
Ну и тэг для логов был null. Но, возможно, это так задумано.

Re: Перехват смс с определенным содержанием

Добавлено: 19 июн 2012, 09:29
good
Пробую запустить у себя - все равно не работает,смс не проходят.Вы не могли бы у себя попробовать запустить?

Re: Перехват смс с определенным содержанием

Добавлено: 19 июн 2012, 09:35
damager82
good писал(а):Пробую запустить у себя - все равно не работает,смс не проходят.Вы не могли бы у себя попробовать запустить?
Я у себя запускал - у меня все ок.
Как тестируете? И где результат ищете?

И какая цель, уточните. Сейчас приложение ловит входящие смс. Насчет удаления я не смотрел.

Re: Перехват смс с определенным содержанием

Добавлено: 19 июн 2012, 09:44
good
Запускаю 2 эмуля.С эмуля 1 отправляю смс с текстом 111,на эмуле 2 принимаю смс.Приложение установил на эмуле 2.Результат - появляется оповещение о приходе смс и смс сохраняется.Цель - чтобы оповещение при приходе смс с определенным текстом не появлялось,смс не записывалось.

Re: Перехват смс с определенным содержанием

Добавлено: 20 июн 2012, 09:44
damager82
good писал(а):Запускаю 2 эмуля.С эмуля 1 отправляю смс с текстом 111,на эмуле 2 принимаю смс.Приложение установил на эмуле 2.Результат - появляется оповещение о приходе смс и смс сохраняется.Цель - чтобы оповещение при приходе смс с определенным текстом не появлялось,смс не записывалось.
А, да. Забыл приоритет вернуть в Intent Filter.

<intent-filter android:priority="999">

Re: Перехват смс с определенным содержанием

Добавлено: 20 июн 2012, 16:21
good
Огромное человеческое спасибо! Как мне вас отблагодарить?

Re: Перехват смс с определенным содержанием

Добавлено: 21 июн 2012, 09:07
damager82
good писал(а):Огромное человеческое спасибо! Как мне вас отблагодарить?
На то он и форум, чтобы помогать )

Re: Перехват смс с определенным содержанием

Добавлено: 04 мар 2013, 11:53
neoksi
Тут появился следующий вопрос:
Бывает приходят смс состоящие из 2х или более, как отловить смс с полным текстом?

Re: Перехват смс с определенным содержанием

Добавлено: 04 мар 2013, 12:06
rezak90
neoksi писал(а):Тут появился следующий вопрос:
Бывает приходят смс состоящие из 2х или более, как отловить смс с полным текстом?
писал давно, но вроде как там учёл все эти моменты http://activity-android.blogspot.com/20 ... -post.html

Re: Перехват смс с определенным содержанием

Добавлено: 06 мар 2013, 05:46
neoksi
rezak90 писал(а):...
писал давно, но вроде как там учёл все эти моменты http://activity-android.blogspot.com/20 ... -post.html
Это у тебя на отправку сообщений (и честно сложно читается, код с текстом сливается при взгляде).

Ответ нашел на хабре, но что-то сейчас страница недоступна со статьёй, как и многие другие, что в закладках, странно однако.

В общем смысл в том, что в первом посте этой темы приведен код чтения только первой смс, а вот код, как собрать полную смс:

Код: Выделить всё

        Object[] pdus = (Object[]) pudsBundle.get("pdus");
        SmsMessage[] messages = new SmsMessage[pdus.length];
        for (int i = 0; i < pdus.length; i++) {
            messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
        }
        	String sWho = messages[0].getOriginatingAddress();
        	StringBuilder bodyText = new StringBuilder();
        	    for (int i = 0; i < messages.length; i++) {
        	        bodyText.append(messages[i].getMessageBody());
        	    }
        	String sBody = bodyText.toString();
Таким образом, если смс состоит из нескольких, то в переменной sBody мы получаем полный текст сообщения и дальше можем над ним манипулировать.

Re: Перехват смс с определенным содержанием

Добавлено: 29 июн 2015, 16:42
sanya920
у меня вылетает приложение при получении сообщения. есть у кого исходник?

Re: Перехват смс с определенным содержанием

Добавлено: 23 авг 2015, 23:58
Mikhail_dev
Неправда. Это не мой номер.

Re: Перехват смс с определенным содержанием

Добавлено: 26 дек 2015, 09:54
MashaShyk
ЗНАЮ ОДНОГО ПАРНЯ, КОТОРЫЙ В СВОЕ ВРЕМЯ ПОМОГ РЕШИТЬ МНЕ РЯД СЕМЕЙНЫХ ПРОБЛЕМ С МУЖЕМ И ДЕТЬМИ: ПОМОГ С ПРОСЛУШКОЙ ИХ ТЕЛЕФОНОВ И РАСПЕЧАТКОЙ СМС ПЕРЕПИСОК. КОМУ НАДО ОБРАЩАЙТЕСЬ, НЕ ПОЖАЛЕЕТЕ, ВОТ ЕГО НОМЕР: +9298297542. А КСТАТИ ОН ЕЩЕ МОЖЕТ ВЗЛОМ СТРАНИЧЕК В СОЦСЕТЯХ ОРГАНИЗОВАТЬ, СКАЙПА И ЭЛЕКТРОННОЙ ПОЧТЫ

Re: Перехват смс с определенным содержанием

Добавлено: 04 май 2016, 19:30
Stalker1204
Доброе время суток.
Задача - аналогичная. Нужно передать СМС, выловить его, распарсить ну и выдать команду на исполняемое устройство.
Все работает. Но избавиться от уведомления и перемещения сообщения во входящие не получается.
Вроде не мешает, но как то не аккуратненько. Способ, описанный в этой ветке пробовал. Не спасает.
В инете есть инфа, что сообщение нужно удалять.
Но так же написано, что abortBroadcast() должен прекратить обработку сообщения вообще.
Подскажите что попробовать?

Re: Перехват смс с определенным содержанием

Добавлено: 09 июл 2016, 10:46
MashaShyk
ПРОСЛУШКА МОБИЛЬНОГО, ПЕРЕХВАТ СМС, ДЕТАЛИЗАЦИЯ, ВЗЛОМ СТРАНИЧЕК В СОЦСЕТЯХ, ВАЙБЕРА, ВАТСАПА, СКАЙПА, ОПРЕДЕЛЕНИЕ МЕСТОПОЛОЖЕНИЯ АБОНЕНТА ПО НОМЕРУ. ОБРАЩАЙТЕСЬ К ПРОФЕССИОНАЛАМ. КОНТАКТЫ: +79385045635