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

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

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

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

10.07.2016, 09:29. Просмотров 1033. Ответов 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 на котором запущенно приложение, слышал то...

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

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

Добавлено через 4 минуты
Выложи код
0
Sharwwe
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
OlegJV
103 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 472
19.07.2016, 20:31 #10
Попробуй в ресивере перед startActivity вставить:

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

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

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

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

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

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

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

Добавлено через 1 минуту
Метод onReceive срабатывает?
0
Sharwwe
0 / 0 / 0
Регистрация: 10.07.2016
Сообщений: 18
19.07.2016, 20:58  [ТС] #15
OlegJV, Потому что сообщение о перехвате не выводится... По идее после перехвата должно выводиться...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.07.2016, 20:58
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.07.2016, 20:58
Ответ Создать тему
Опции темы

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