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

Вывод смс в textView

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

Author24 — интернет-сервис помощи студентам
Добрый день Уже пару дней не могу разобраться с кодом. Половина кода, была свиснута с этого видео 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.07.2016, 09:29
Ответы с готовыми решениями:

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

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

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

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

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

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

Кликните здесь для просмотра всего текста
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  [ТС] 5
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
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
11.07.2016, 15:47 6
Очень загадочный код
0
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
19.07.2016, 19:52  [ТС] 7
OlegJV, Странно, но преложение вообще перестало перехватывать смс... Вы не могли бы написать полный код? Я был бы очень признателен)
0
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
19.07.2016, 20:17 8
На каком этапе теряется смс?

Добавлено через 4 минуты
Выложи код
0
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
19.07.2016, 20:19  [ТС] 9
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
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
19.07.2016, 20:31 10
Попробуй в ресивере перед 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  [ТС] 11
OlegJV, Поставил, что то должно было измениться?
0
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
19.07.2016, 20:42 12
Ну как минимум активити должна открываться

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

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

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

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

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

Добавлено через 1 минуту
Метод onReceive срабатывает?
0
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
19.07.2016, 20:58  [ТС] 15
OlegJV, Потому что сообщение о перехвате не выводится... По идее после перехвата должно выводиться...
0
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
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
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
21.07.2016, 12:51  [ТС] 17
OlegJV, Спасибо, друг! Я не отвечал потому что было поздно, и я начал сильно тупить, и не хотел глупыми вопросами загружать) Спасибо большое, просто огромное!

Добавлено через 23 часа 47 минут
OlegJV, Спасибо еще раз все работает) Хотел спросить, может вы мне подскажите, как запретить передавать буквы? Т.е что бы от сообщения "hello 5544" передавалось только число?
0
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
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
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
21.07.2016, 17:03  [ТС] 19
OlegJV, Это в ресивере?
0
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
21.07.2016, 17:08 20
Это где хочешь. Хочешь - в ресивере перед передачей, хочешь в активити перед выводом текста
0
21.07.2016, 17:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.07.2016, 17:08
Помогаю со студенческими работами здесь

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru