Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Sharwwe
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
#1

Вывод смс в textView - Программирование Android

10.07.2016, 09:29. Просмотров 1164. Ответов 36

Добрый день Уже пару дней не могу разобраться с кодом. Половина кода, была свиснута с этого видео https://www.youtube.com/watch?v=op_7cUKceaA&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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2016, 09:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод смс в textView (Программирование Android):

Вывод в TextView - Программирование Android
Здраствуйте, я новичок и у меня возник первый вопрос: есть TextView tv1 и есть &quot;InetAddress Address = InetAddress.getByName(&quot;www.ya.ru&quot;);&quot;...

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

Вывод в TextView - Программирование Android
Здраствуйте, я новичок и у меня возник первый вопрос: есть TextView tv1 и есть &quot;InetAddress Address = InetAddress.getByName(&quot;www.ya.ru&quot;);&quot;...

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

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

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

36
OlegJV
103 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 472
19.07.2016, 21:55 #16
Ты, видимо, партизан. Каждый ответ выпытывать надо. 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
Sharwwe
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
21.07.2016, 12:51  [ТС] #17
OlegJV, Спасибо, друг! Я не отвечал потому что было поздно, и я начал сильно тупить, и не хотел глупыми вопросами загружать) Спасибо большое, просто огромное!

Добавлено через 23 часа 47 минут
OlegJV, Спасибо еще раз все работает) Хотел спросить, может вы мне подскажите, как запретить передавать буквы? Т.е что бы от сообщения "hello 5544" передавалось только число?
0
OlegJV
103 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 472
21.07.2016, 15:16 #18
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
Sharwwe
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
21.07.2016, 17:03  [ТС] #19
OlegJV, Это в ресивере?
0
OlegJV
103 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 472
21.07.2016, 17:08 #20
Это где хочешь. Хочешь - в ресивере перед передачей, хочешь в активити перед выводом текста
0
Sharwwe
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
21.07.2016, 17:37  [ТС] #21
OlegJV, Боже, тупой эклипс!(((( Все проекты пропали куда то....

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

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

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

Добавлено через 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
Sharwwe
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
22.07.2016, 09:16  [ТС] #29
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
103 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 472
22.07.2016, 09:25 #30
А у тебя в ресивере как написано? Так:

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

Java
1
inTxt.setText(intent.getExtras().getString("body"));
И где логика вообще? Ты сначала выдираешь цифры из левой строки "hello 6666", а потом выводишь в текст необработанную строку из интента.
0
22.07.2016, 09:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2016, 09:25
Привет! Вот еще темы с ответами:

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

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

Текст из TextView перенести в другой TextView по нажатию Button - Программирование Android
Люди, помогите плиз. Недавно начал ковырять программирование под Android. Хотел сделать банальную вещь - текст из TextView перенести в...

Вывод в GridView в одной ячейке несколько TextView - Программирование Android
Т.е. например в гриде 10 ячеек и нужно чтобы в каждой было по 3 TextView. Как это можно реализовать? )


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.