Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18

Вывод смс в textView

10.07.2016, 09:29. Показов 3783. Ответов 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
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
21.07.2016, 17:37  [ТС]
Студворк — интернет-сервис помощи студентам
OlegJV, Боже, тупой эклипс!(((( Все проекты пропали куда то....

Добавлено через 4 минуты
OlegJV, Боже.... Куда проекты пропали??? Чертов эклипс...
0
 Аватар для OlegJV
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
21.07.2016, 17:55
Я не брал
1
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
21.07.2016, 18:00  [ТС]
OlegJV, Но дело в том что я уже боюсь его закрывать...
0
 Аватар для OlegJV
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
21.07.2016, 18:03
Переходи на АС пока не поздно. Потом задолбаешься проекты переносить.
0
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
22.07.2016, 08:13  [ТС]
OlegJV, АС?? Андроид студия? Если да то тоже думаю... Она и заточена чисто под андроид, и понятнее должно быть)

Добавлено через 13 часов 55 минут
OlegJV, Добрый день, я уже наверное задолбал вас своими вопросами но поделать ничего не могу Ж) Вообщем возник вопрос по коду, а точнее предположение, что вы меня не правильно поняли... Я попробую поподробнее рассказать.. Ресивер перехватывает смс с подобным текстом: "Привет, твой уникальный ид 40255, Спасибо!", Текст всегда разный, и цифры тоже.. Нужно чтобы до editText дошли только цифры, без остального текста.. Спасибо заранее
0
 Аватар для OlegJV
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
22.07.2016, 08:25
Елыпалы, это ж пример. Тебя смущает строка String s = "hello 5544";? Вместо неё у тебя будет твоя переменная body в ресивере, и все.

Добавлено через 1 минуту
А в интент вместо body пойдёт result
0
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
22.07.2016, 08:55  [ТС]
OlegJV, OlegJV, Хм, так вообще ничего не отображается, просто пустое поле, какая бы смс не приходила..
0
 Аватар для OlegJV
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
22.07.2016, 09:04
Я вот стесняюсь спросить, а что там насчет логов?

Добавлено через 7 минут
Должно было получиться так:

Кликните здесь для просмотра всего текста
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
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);
            
            Pattern pattern = Pattern.compile("\\d+");
            String result = "";
            Matcher matcher = pattern.matcher(body);
            int start = 0;
            while (matcher.find(start)) {
                result = body.substring(matcher.start(), matcher.end());
                start = matcher.end();
            }
            
            Log.e("TAG", "получили цифры " + result);
 
            Intent activityIntent = new Intent(context, MainActivity.class);
            activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            activityIntent.putExtra("from", sms_from);
            activityIntent.putExtra("body", result);
            context.startActivity(activityIntent);
        }
    }
}


Правильно?
0
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
22.07.2016, 09:16  [ТС]
OlegJV,
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
Pattern pattern = Pattern.compile("\\d+");
            String body = "hello 6666";
            String result = "";
            Matcher matcher = pattern.matcher(body);
            int start = 0;
            while (matcher.find(start)) {
                result = body.substring(matcher.start(), matcher.end());
                start = matcher.end();
                
            }
            Log.e("TAG", "Обработано смс " + result );
            final EditText inTxt = (EditText) findViewById(R.id.editText1);//Текст сообщения
            inTxt.setText(intent.getExtras().getString("result"));
Я ставил в активити, судя по логам, сообщение обрабатывается как нужно, но не выводится...
0
 Аватар для OlegJV
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
22.07.2016, 09:25
А у тебя в ресивере как написано? Так:

Java
1
activityIntent.putExtra("body", result);
Тогда в активити должно быть:

Java
1
inTxt.setText(intent.getExtras().getString("body"));
И где логика вообще? Ты сначала выдираешь цифры из левой строки "hello 6666", а потом выводишь в текст необработанную строку из интента.
0
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
22.07.2016, 09:28  [ТС]
OlegJV, Все все, спасибо действительно ступил в этом месте :
Java
1
activityIntent.putExtra("body", result);
Вы так хорошо разбираетесь в программировании, сколько лет вы учились java?
0
 Аватар для OlegJV
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
22.07.2016, 09:49
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
Pattern pattern = Pattern.compile("\\d+");
            String body = intent.getExtras().getString("body");
            String result = "";
            Matcher matcher = pattern.matcher(body);
            int start = 0;
            while (matcher.find(start)) {
                result = body.substring(matcher.start(), matcher.end());
                start = matcher.end();
                
            }
            Log.e("TAG", "Обработано смс " + result );
            final EditText inTxt = (EditText) findViewById(R.id.editText1);//Текст сообщения
            inTxt.setText(result);
Ну элементарные же вещи

Добавлено через 19 минут
сколько лет вы учились java?
Это некорректный вопрос, потому что я занимаюсь этим крайне нерегулярно и с большими перерывами. Чистое время сложно посчитать.
0
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
22.07.2016, 10:19  [ТС]
OlegJV, Нет, я просто думал что вы не дома этому учились, а в специально школе( Я не знаю как они называются) .. Я немного поэкспериментировал с кодом, получается что если придет сообщение "Your code 5035, help 4444" то он выведет последние 4444.... А можно ли выводить только первые цифры т.е 5035, а все остальные игнорировать?? Я так понял это можно организовать обрезкой сообщения до определенного количества символов, чтобы передалось только начало, самое нужное...
0
 Аватар для OlegJV
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
22.07.2016, 10:40
Я же не знаю все возможные варианты строк.
0
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
22.07.2016, 10:56  [ТС]
OlegJV, По сути, сообщение всегда одинаковое, где то в середине находится цифра, от 1 до 10... А после этого еще множество побочных цифр... Поэтому я хочу только одно число получить... По гуглил. не нашел ничего...
0
 Аватар для OlegJV
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
22.07.2016, 13:24
Что-то сегодня башка болит и совсем не варит. Пока могу предложить вот такой костыль:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Pattern pattern = Pattern.compile("\\d+");
        String body = intent.getExtras().getString("body");
        String result = "";
        boolean firstNum = false;
        char[] symb = body.toCharArray();
        for (int i = 0; i < symb.length; i++) {
            if (p.matcher(String.valueOf(symb[i])).matches()) {
                if (!firstNum) firstNum = true;
                result = result + symb[i];
            }
            else {
                if (firstNum) break;
            }
        }
        final EditText inTxt = (EditText) findViewById(R.id.editText1);
        inTxt.setText(result);
0
111 / 111 / 43
Регистрация: 24.05.2015
Сообщений: 329
22.07.2016, 16:56
Цитата Сообщение от Sharwwe Посмотреть сообщение
А можно ли выводить только первые цифры т.е 5035, а все остальные игнорировать??
Решение не мое, нашел в свое время на stackoverflow.
Если нужна только первая цифра, то использовать код как есть.
Если же нужны все цифры, то if заменить на while и соответственно все цифры сохранять в какой-нить масив.
Java
1
2
3
4
5
6
7
 String str ="Your code 5035, help 4444";
        Pattern pattern=Pattern.compile("-?\\d+");
        Matcher matcher=pattern.matcher(str);
        String firstNum;
        if(matcher.find()){
            firstNum=matcher.group();
        }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.07.2016, 16:56
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru