0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18

Вывод смс в textView

10.07.2016, 09:29. Показов 3915. Ответов 36

Студворк — интернет-сервис помощи студентам
Добрый день Уже пару дней не могу разобраться с кодом. Половина кода, была свиснута с этого видео https://www.youtube.com/watch?... aA&t=1006s Мне нужно было только получение смс, и вывод в textView, перехватить удалось, а вот вывести в textView не получается. Прошу помощи, очень надеюсь что не пройдете мимо

MainActivity.java
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class MainActivity extends Activity {
    
    IntentFilter intentFilter;
    
    private BroadcastReceiver intentReceiver = new BroadcastReceiver(){
        @Override
        public void onReceive(Context context,Intent intent)
        {
            TextView inTxt = (TextView) findViewById(R.id.textView1);
            inTxt.setText(intent.getExtras().getString("sms"));
            
            IntentFilter intentFilter = new IntentFilter();
            intentFilter.addAction("SMS_RECEIVED_ACTION");
        }   
    };
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
    
}
}


SmsRecever.java
Кликните здесь для просмотра всего текста
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
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.TextView;
import android.widget.Toast;
 
public class SmsRecever extends BroadcastReceiver {
 
    @SuppressWarnings("deprecation")
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();
        SmsMessage[] messages = null;
        String str = "";
        if(bundle != null)
        {
            Object[] pdus = (Object[]) bundle.get("pdus");
            messages = new SmsMessage[pdus.length];
            for(int i=0; i<messages.length; i++)
            {
                messages[i]=SmsMessage.createFromPdu((byte[])pdus[i]);
                str += "Message from "+messages[i].getOriginatingAddress();
                str += " :";
                str += messages[i].getMessageBody().toString();
                str += "\n";
            }
            Toast.makeText(context, str, Toast.LENGTH_LONG).show();
        
 
            Intent broadcastIntent = new Intent();
            broadcastIntent.setAction("SMS_RECEIVED_ACTION");
            broadcastIntent.putExtra("sms", str);
            context.sendBroadcast(broadcastIntent);
            abortBroadcast();
 
    }
    }
    }


Manifest

Кликните здесь для просмотра всего текста
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
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="example.smsrecever"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="10" />
    <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
    <uses-permission android:name="android.permission.READ_SMS"/>
    
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".AdctivityMainActivity"
            android:label="@string/title_activity_adctivity_main" >
        </activity>
        <receiver android:name="SmsRecever">
            <intent-filter android:priority="100">
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
            </intent-filter>
        </receiver>
    </application>
 
</manifest>
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.07.2016, 09:29
Ответы с готовыми решениями:

Вывод в TextView
Здраствуйте, я новичок и у меня возник первый вопрос: есть TextView tv1 и есть &quot;InetAddress Address =...

Вывод в textView из БД
У меня есть БД public void onCreate(SQLiteDatabase db) { // создаем таблицу с полями db.execSQL(&quot;create table...

Вывод в TextView
Здраствуйте, я новичок и у меня возник первый вопрос: есть TextView tv1 и есть &quot;InetAddress Address =...

36
 Аватар для OlegJV
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
10.07.2016, 10:30
Зачем такие сложности? Сделай простой интент. Если подождать часа 3-4, пока я до компа доберусь... А так у тебя ресивер в активити не регистрируется и фильтр как-то странно расположен...
1
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
11.07.2016, 10:20  [ТС]
Спасибо за совет, на самом деле я сам сейчас не за пк, так что я могу подождать до вечера

Добавлено через 23 часа 37 минут
OlegJV, Простите за наглость, но не могли бы вы написать мне под редактированный код?
0
 Аватар для OlegJV
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
11.07.2016, 13:16
Ну я так понял, что текст СМС благополучно перехвачен в ресивере. Далее все зависит от того, запущена активити или нет. Если запущена, то в ресивере формируем интент:

Кликните здесь для просмотра всего текста
Java
1
2
3
4
Intent intent = new Intent(INTENT_NAME);    // В INTENT_NAME желательно использовать имя пакета
                                            // чтоб обеспечить уникальность
intent.putExtra("data", smsText);       // Втыкаем в интент текст смски
context.sendBroadcast(intent);  // и отсылаем его по системе...


А теперь ловим его в активити, например делаем там метод receive(), который запускаем, например, в onCreate:

Кликните здесь для просмотра всего текста
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
private void receive(boolean b) {
        if (b) { // в onCreate пишем receive(true), чтоб зарегистрировать ресивер.
            IntentFilter filter = new IntentFilter();
            filter.addAction(INTENT_NAME);
 
            br = new BroadcastReceiver() {
 
                @Override
                public void onReceive(Context context, Intent intent) {
                    if (intent.getAction().equals(INTENT_NAME)) {
                        String smsText = intent.getStringExtra("data");
                        // делаем что нам надо с полученным текстом
                    }
                }
            };
            try {
                registerReceiver(br, filter);
            }
            catch (Exception e) {
            }
        }
        else { //
            try {
                unregisterReceiver(br); //в onPause пишем receive(false), чтоб убить ресивер.
            }
            catch (Exception e) {
            }
        }
    }


Обработчики ошибок на усмотрение...

Добавлено через 17 минут
Если же активити не запущена, еще проще - запускаем ее:

Java
1
2
3
    Intent intent = new Intent(context, MyActivity.class);
    intent.putExtra("data", smsText);
    context.startActivity(intent);
А в onCreate активити ловим:

Java
1
String smsText = getIntent.getStringExtra("data");
0
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
11.07.2016, 15:41  [ТС]
OlegJV, Спасибо большое, попозже проверю) Я вот раньше такой код находил на форуме, но в textView не выводило, и сообщения бесконечно появлялись) Хотя у меня на первый взгляд, никаких сомнений не появилось что это не заработает)
Кликните здесь для просмотра всего текста
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
public class MainActivity extends Activity {
    
    IntentFilter IntentFilter = new IntentFilter();
    
    private BroadcastReceiver intentReceiver = new BroadcastReceiver(){
        @Override
        public void onReceive(Context context,Intent intent)
        {
            receve(true);
            TextView wTxt = (TextView) findViewById(R.id.textv);
            wTxt.setText(intent.getExtras().getString("message"));
            String sinTxt = intent.getStringExtra("message");   
        
            
            }
        
 
        private void receve(boolean b) {
            // TODO Auto-generated method stub
            
        }   
    };
 
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
    
}
 
   }
0
 Аватар для OlegJV
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
11.07.2016, 15:47
Очень загадочный код
0
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
19.07.2016, 19:52  [ТС]
OlegJV, Странно, но преложение вообще перестало перехватывать смс... Вы не могли бы написать полный код? Я был бы очень признателен)
0
 Аватар для OlegJV
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
19.07.2016, 20:17
На каком этапе теряется смс?

Добавлено через 4 минуты
Выложи код
0
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
19.07.2016, 20:19  [ТС]
OlegJV, Я сам не знаю.. Отладка почему то не работает(Раньше все было норм). Я сделал что бы открывалось новое активити, но смс не перехватывается, и даже активити не открывается....

Добавлено через 1 минуту
OlegJV,
Кликните здесь для просмотра всего текста
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
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.TextView;
import android.widget.Toast;
 
public class Recever extends BroadcastReceiver {
 
    @SuppressWarnings("deprecation")
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();
        SmsMessage[] messages = null;
        String str = "";
        if(bundle != null)
        {
            Object[] pdus = (Object[]) bundle.get("pdus");
            messages = new SmsMessage[pdus.length];
            for(int i=0; i<messages.length; i++)
            {
                messages[i]=SmsMessage.createFromPdu((byte[])pdus[i]);
                str += "Message from "+messages[i].getOriginatingAddress();
                str += " :";
                str += messages[i].getMessageBody().toString();
                str += "\n";
            }
            Toast.makeText(context, str, Toast.LENGTH_LONG).show();
        
 
            Intent intent1 = new Intent(context, MyActivity.class);
            intent1.putExtra("data", str);
            context.startActivity(intent1);
            
            Intent broadcastIntent = new Intent();
            abortBroadcast();
 
    }
    }
    }


MyActivity

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class MyActivity extends Activity {
 
    
 
    
 
    private Intent intent;
 
    protected void onCreate(Bundle savedInstanceState, Intent getIntent) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        String str = getIntent.getStringExtra("data");
 
        
        TextView str1 = (TextView) findViewById(R.id.textView1);
        str1.setText(intent.getExtras().getString("data"));
        
 
 
 
    }
}
0
 Аватар для OlegJV
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
19.07.2016, 20:31
Попробуй в ресивере перед startActivity вставить:

Java
1
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Добавлено через 23 секунды
У меня сейчас нет компа под рукой

Добавлено через 1 минуту
И логами пользоваться учись
0
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
19.07.2016, 20:36  [ТС]
OlegJV, Поставил, что то должно было измениться?
0
 Аватар для OlegJV
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
19.07.2016, 20:42
Ну как минимум активити должна открываться

Добавлено через 47 секунд
Напиши по человечески, какие ошибки получаешь

Добавлено через 49 секунд
В манифесте активити зарегистрирована?

Добавлено через 1 минуту
broadcastIntent это для чего вообще у тебя?

Добавлено через 2 минуты
Toast в ресивере выводится? Вообще-то для этого есть Log.d("TAG", Str);
0
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
19.07.2016, 20:43  [ТС]
OlegJV, Активити не открывается. Ошибок нет, просто сообщение не перехватывается.. Да зарегистрирована...
0
 Аватар для OlegJV
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
19.07.2016, 20:48
Ну почему ты решил, что не перехватывается?

Добавлено через 58 секунд
Что насчёт Toast?

Добавлено через 1 минуту
Метод onReceive срабатывает?
0
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
19.07.2016, 20:58  [ТС]
OlegJV, Потому что сообщение о перехвате не выводится... По идее после перехвата должно выводиться...
0
 Аватар для OlegJV
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
19.07.2016, 21:55
Ты, видимо, партизан. Каждый ответ выпытывать надо. onReceive срабатывает?

Добавлено через 4 минуты
Забегая вперёд - насчёт активити. У тебя там объявлен intent. По умолчанию он null. Какой текст ты надеешься из него получить?

Добавлено через 46 минут
А в ответ тишина. Ну ладно. Вот разрешения в манифесте:

Java
1
2
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
Вот ресивер в манифесте:

Java
1
2
3
4
5
        <receiver android:name=".SmsReceiver">
            <intent-filter android:priority="100">
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
            </intent-filter>
        </receiver>
Вот код ресивера:

Кликните здесь для просмотра всего текста
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
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.telephony.SmsMessage;
import android.util.Log;
 
public class SmsReceiver extends BroadcastReceiver {
 
    private static final String ACTION  = "android.provider.Telephony.SMS_RECEIVED";
 
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e("TAG", "сработал onReceive");
 
        if (intent != null && intent.getAction() != null && ACTION.compareToIgnoreCase(intent.getAction()) == 0) {
            Object[] pduArray = (Object[]) intent.getExtras().get("pdus");
            SmsMessage[] messages = new SmsMessage[pduArray.length];
            for (int i = 0; i < pduArray.length; i++) {
 
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    String format = intent.getExtras().getString("format");
                    messages[i] = SmsMessage.createFromPdu((byte[]) pduArray[i], format);
                }
                else {
                    messages[i] = SmsMessage.createFromPdu((byte[]) pduArray[i]);
                }
            }
            String sms_from = messages[0].getDisplayOriginatingAddress();
            StringBuilder bodyText = new StringBuilder();
            for (int i = 0; i < messages.length; i++) {
                bodyText.append(messages[i].getMessageBody());
            }
            String body = bodyText.toString();
 
            Log.e("TAG", "получили СМС от " + sms_from + " : " + body);
 
            Intent activityIntent = new Intent(context, MainActivity.class);
            activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            activityIntent.putExtra("from", sms_from);
            activityIntent.putExtra("body", body);
            context.startActivity(activityIntent);
        }
    }
}


Вот код в активити:

Java
1
2
3
4
5
6
7
8
9
10
@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        Intent intent = getIntent();
        String message = intent.getStringExtra("body");
        Log.e("TAG", "get sms " + message);
 
}
Все прекрасно работает. Ты на тот номер хоть СМС отправляешь?

Добавлено через 2 минуты
Специально пошел на работу до кабинета с компьютером. А у меня GMT +5.
0
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
21.07.2016, 12:51  [ТС]
OlegJV, Спасибо, друг! Я не отвечал потому что было поздно, и я начал сильно тупить, и не хотел глупыми вопросами загружать) Спасибо большое, просто огромное!

Добавлено через 23 часа 47 минут
OlegJV, Спасибо еще раз все работает) Хотел спросить, может вы мне подскажите, как запретить передавать буквы? Т.е что бы от сообщения "hello 5544" передавалось только число?
0
 Аватар для OlegJV
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
21.07.2016, 15:16
Java
1
2
3
4
5
6
7
8
9
    Pattern pattern = Pattern.compile("\\d+");
        String s = "hello 5544";
        String result = "";
        Matcher matcher = pattern.matcher(s);
        int start = 0;
        while (matcher.find(start)) {
            result = s.substring(matcher.start(), matcher.end());
            start = matcher.end();
        }
0
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
21.07.2016, 17:03  [ТС]
OlegJV, Это в ресивере?
0
 Аватар для OlegJV
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
21.07.2016, 17:08
Это где хочешь. Хочешь - в ресивере перед передачей, хочешь в активити перед выводом текста
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.07.2016, 17:08
Помогаю со студенческими работами здесь

Форматированный вывод в TextView
Здравствуйте, есть переменная типа double. Нужно если это число целое(например 10.0 --&gt;10), вывести только его целое значение в...

Вывод степени в TextView
Нужно вывести число в TextView, например: 10 в -3й степени и тд. Пытался через юникод делать, но там числа в верхнем регистре только до...

Вывод в TextView версии API
Доброго времени суток всем) Такой вопрос, мне необходимо выводить версии API в TextView на котором запущенно приложение, слышал то...

Вывод результата с TextView / Andoid
Доброго времени суток. Помогите пожалуйста, изначально программа планировалась для расчета необходимого количества сосны (либо другого...

Вывод в TextView значение из переменной int
как вывести в TextView значение из переменной int? Пробовал функцию toString(), но компилятор говорит что такой метод для int не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru