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

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

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

BroadcastReceiver, куда добавить код? - Программирование Android

23.03.2016, 08:41. Просмотров 321. Ответов 6
Метки нет (Все метки)

помогите понять часть статьи https://habrahabr.ru/post/234425/.
добрался до Для работы BroadcastReceiver'а надо добавить немного кода в onCreate() или подобный метод вашего класса:
Java
1
2
3
IntentFilter mFilter = new IntentFilter("REFRESH");
mContext.registerReceiver(mMessageReceiver, mFilter);
isRegistered = true;
и завис. непонятно , куда вставлять данный код - если в новый класс, то как. ведь никакая форма не создается.

вот исходники
activity_main.xml
XML
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
50
51
52
53
54
55
56
57
58
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
 
    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Complete the fields to send a sms" />
 
    <EditText
        android:id="@+id/phoneNumber"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="ex: 1234567890"
        android:inputType="phone" />
 
    <EditText
        android:id="@+id/smsBody"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Write your sms here...." />
 
    <Button
        android:id="@+id/smsManager"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Send the sms by SmsManager" />
 
    <Button
        android:id="@+id/smsSIntent"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Send the sms by SENDTO" />
 
    <Button
        android:id="@+id/smsVIntent"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Send the sms by VIEW" />
 
    <Button
        android:id="@+id/btnUSSD1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="*100*1#" />
 
    <Button
        android:id="@+id/btnUSSD2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="*152*1#" />
 
 
</LinearLayout>
AndroidManifest.xml
XML
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
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.smssend"
    android:versionCode="1"
    android:versionName="1.0">
 
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />
 
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
 
    <service
        android:name=".USSDService"
        android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" >
        <intent-filter>
            <action android:name="android.accessibilityservice.AccessibilityService" />
        </intent-filter>
    </service>
 
    <application
 
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
 
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
 
</manifest>
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
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package com.example.smssend;
 
import android.accessibilityservice.AccessibilityServiceInfo;
import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.telephony.SmsManager;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.accessibility.AccessibilityEvent;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
 
public class MainActivity extends Activity {
 
    private EditText phoneNumber;
    private EditText smsBody;
    private Button smsManagerBtn;
    private Button smsSendToBtn;
    private Button smsViewBtn;
 
    // [url]https://habrahabr.ru/post/234425/[/url]
    private Button smsbtnUSSD1;
    private Button smsbtnUSSD2;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        phoneNumber = (EditText) findViewById(R.id.phoneNumber);
        smsBody = (EditText) findViewById(R.id.smsBody);
        smsManagerBtn = (Button) findViewById(R.id.smsManager);
        smsSendToBtn = (Button) findViewById(R.id.smsSIntent);
        smsViewBtn = (Button) findViewById(R.id.smsVIntent);
        // [url]https://habrahabr.ru/post/234425/[/url]
        smsbtnUSSD1 = (Button) findViewById(R.id.btnUSSD1);
        smsbtnUSSD2 = (Button) findViewById(R.id.btnUSSD2);
 
 
        // запрос по кнопке *100#
        smsbtnUSSD1.setOnClickListener(new OnClickListener() {
            public void onClick(View view) {
                String encodedHash = Uri.encode("#");
                String ussd = "*100" + encodedHash;
                startActivityForResult(new Intent("android.intent.action.CALL",
                        Uri.parse("tel:" + ussd)), 1);
                ;
            }
        });
 
        // запрос по кнопке *152*1#
        smsbtnUSSD2.setOnClickListener(new OnClickListener() {
            public void onClick(View view) {
                String encodedHash = Uri.encode("#");
                String ussd = "*152*1" + encodedHash;
                startActivityForResult(new Intent("android.intent.action.CALL",
                        Uri.parse("tel:" + ussd)), 1);
                ;
            }
        });
 
 
        smsManagerBtn.setOnClickListener(new OnClickListener() {
            public void onClick(View view) {
                sendSmsByManager();
            }
        });
 
        smsSendToBtn.setOnClickListener(new OnClickListener() {
            public void onClick(View view) {
                sendSmsBySIntent();
            }
        });
 
        smsViewBtn.setOnClickListener(new OnClickListener() {
            public void onClick(View view) {
                sendSmsByVIntent();
            }
        });
    }
 
    public void sendSmsByManager() {
        try {
            // Get the default instance of the SmsManager
            SmsManager smsManager = SmsManager.getDefault();
            smsManager.sendTextMessage(phoneNumber.getText().toString(),
                    null,
                    smsBody.getText().toString(),
                    null,
                    null);
            Toast.makeText(getApplicationContext(), "Your sms has successfully sent!",
                    Toast.LENGTH_LONG).show();
        } catch (Exception ex) {
            Toast.makeText(getApplicationContext(), "Your sms has failed...",
                    Toast.LENGTH_LONG).show();
            ex.printStackTrace();
        }
    }
 
    public void sendSmsBySIntent() {
        // add the phone number in the data
        Uri uri = Uri.parse("smsto:" + phoneNumber.getText().toString());
        Intent smsSIntent = new Intent(Intent.ACTION_SENDTO, uri);
        // add the message at the sms_body extra field
        smsSIntent.putExtra("sms_body", smsBody.getText().toString());
        try {
            startActivity(smsSIntent);
        } catch (Exception ex) {
            Toast.makeText(MainActivity.this, "Your sms has failed...",
                    Toast.LENGTH_LONG).show();
            ex.printStackTrace();
        }
    }
 
 
    public void sendSmsByVIntent() {
        Intent smsVIntent = new Intent(Intent.ACTION_VIEW);
        // prompts only sms-mms clients
        smsVIntent.setType("vnd.android-dir/mms-sms");
        // extra fields for number and message respectively
        smsVIntent.putExtra("address", phoneNumber.getText().toString());
        smsVIntent.putExtra("sms_body", smsBody.getText().toString());
        try {
            startActivity(smsVIntent);
        } catch (Exception ex) {
            Toast.makeText(MainActivity.this, "Your sms has failed...",
                    Toast.LENGTH_LONG).show();
            ex.printStackTrace();
        }
    }
 
}
USSDService.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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package com.example.smssend;
 
/**
 * Created by Администратор on 22.03.2016.
 */
import android.accessibilityservice.AccessibilityService;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.accessibility.AccessibilityEvent;
import android.widget.Toast;
 
public class USSDService extends AccessibilityService {
 
    static final String TAG = "RecorderService";
 
 
 
 
 
    private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String message = intent.getStringExtra("message");
            Log.i("receiver", "Got message: " + message);
            Toast toast = Toast.makeText(getApplicationContext(),
                    message, Toast.LENGTH_SHORT);
            toast.show();
            //showText(message);
        }
 
 
    };
 
    private String getEventType(AccessibilityEvent event) {
        switch (event.getEventType()) {
            case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:
                return "TYPE_NOTIFICATION_STATE_CHANGED";
            case AccessibilityEvent.TYPE_VIEW_CLICKED:
                return "TYPE_VIEW_CLICKED";
            case AccessibilityEvent.TYPE_VIEW_FOCUSED:
                return "TYPE_VIEW_FOCUSED";
            case AccessibilityEvent.TYPE_VIEW_LONG_CLICKED:
                return "TYPE_VIEW_LONG_CLICKED";
            case AccessibilityEvent.TYPE_VIEW_SELECTED:
                return "TYPE_VIEW_SELECTED";
            case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:
                return "TYPE_WINDOW_STATE_CHANGED";
            case AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED:
                return "TYPE_VIEW_TEXT_CHANGED";
        }
        return "default";
    }
 
    private String getEventText(AccessibilityEvent event) {
        StringBuilder sb = new StringBuilder();
        for (CharSequence s : event.getText()) {
            sb.append(s);
        }
        return sb.toString();
    }
 
    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        String text = getEventText(event);
        Log.v(TAG, String.format(
                "onAccessibilityEvent: [type] %s [class] %s [package] %s [time] %s [text] %s",
                getEventType(event), event.getClassName(), event.getPackageName(),
                event.getEventTime(), getEventText(event)));
        if (event.getClassName().equals("android.app.AlertDialog")) {
            performGlobalAction(GLOBAL_ACTION_BACK);
            Log.i(TAG, text);
            Intent intent = new Intent("REFRESH");
            intent.putExtra("message", text);
            sendBroadcast(intent);
        }
    }
 
    @Override
    public void onInterrupt() {
        Log.v(TAG, "onInterrupt");
    }
 
    @Override
    protected void onServiceConnected() {
        super.onServiceConnected();
        Log.v(TAG, "onServiceConnected");
        AccessibilityServiceInfo info = new AccessibilityServiceInfo();
        info.flags = AccessibilityServiceInfo.DEFAULT;
        info.packageNames = new String[]
                {"com.android.phone"};
        info.eventTypes = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED;
        info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
        setServiceInfo(info);    }
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2016, 08:41     BroadcastReceiver, куда добавить код?
Посмотрите здесь:

Куда вставить готовый код в программе Android Studio? - Программирование Android
Вставил код из &quot;Урок 58&quot; ссылка - http://startandroid.ru/ru/uroki/vse-uroki-spiskom/117-urok-58-dialogi-timepickerdialog.html как...

BroadcastReceiver - Программирование Android
У меня такой вопрос если я создал ресивер и прописал его в манифесте. Мой ресивер прослушивает определенные интенты. И у меня такой вопрос...

BroadcastReceiver и startActivity - Программирование Android
У меня есть служба и BroadcastReceiver. Когда приходит событие, то я вызываю startService. Если служба не запущена, то она запускается и...

Уведомления в BroadcastReceiver - Программирование Android
Привет, уважаемые! Прикрутил BroadcastReceiver, мониторю входящие смс, пытаюсь отключить звук входящего смс если оно удовлетворяет моим...

Servise, BroadcastReceiver, Activity - Программирование Android
Здравствуйте, есть сервис и активити, сервис возвращает данные активити через BroadcastReceiver... все работает отлично, но когда виходиш...

Виджеты, BroadcastReceiver и Строки - Программирование Android
Здравствуйте. Занимаюсь созданием виджета. Делаю что то наподобие нажатия на кнопку. Использую Broadcast. Предполагается ,что после нажатия...

BroadcastReceiver + static переменная - Программирование Android
Работая с бродкаст ресивером задался вопросом, как же он всё-таки работает?) Есть следующий код, который фиксирует состояние телефонного...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pablito
2459 / 1904 / 591
Регистрация: 12.05.2014
Сообщений: 6,712
Завершенные тесты: 1
23.03.2016, 12:02     BroadcastReceiver, куда добавить код? #2
Цитата Сообщение от serjufa1 Посмотреть сообщение
Для работы BroadcastReceiver'а надо добавить немного кода в onCreate() или подобный метод вашего класса
Цитата Сообщение от serjufa1 Посмотреть сообщение
и завис. непонятно , куда вставлять данный код
что непонятно?

а по теме - много кода и много работы разбираться
serjufa1
1 / 1 / 0
Регистрация: 15.10.2007
Сообщений: 75
24.03.2016, 14:10  [ТС]     BroadcastReceiver, куда добавить код? #3
конечно, весь код изучать нет смысла. мне непонятно, куда вставить фрагмент кода (см начало) - в какой из *.java?
Pablito
2459 / 1904 / 591
Регистрация: 12.05.2014
Сообщений: 6,712
Завершенные тесты: 1
24.03.2016, 14:11     BroadcastReceiver, куда добавить код? #4
у тебя много *.java файлов в проекте в которых есть метод onCreate ?
serjufa1
1 / 1 / 0
Регистрация: 15.10.2007
Сообщений: 75
25.03.2016, 12:57  [ТС]     BroadcastReceiver, куда добавить код? #5
давайте так - если Вы слишком умный и гордый. чтобы отвечать прямо на поставленный вопрос, не тратьте тут свое драгоценное время на красноречие.
Так ответить на вопрос может любой, даже дворник. А вот по существу... именно на последнее я и питаю надежду.
Pablito
2459 / 1904 / 591
Регистрация: 12.05.2014
Сообщений: 6,712
Завершенные тесты: 1
25.03.2016, 14:20     BroadcastReceiver, куда добавить код? #6
Цитата Сообщение от serjufa1 Посмотреть сообщение
давайте так
а давай не так
цитирую тебя же - если ты слишком умный или гордый что бы ответить прямо на поставленный мной вопрос выше, то зачем вообще создавать тему? ответит может любой, даже дворник
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2016, 17:59     BroadcastReceiver, куда добавить код?
Еще ссылки по теме:

Чтение preferences в BroadcastReceiver - Программирование Android
Доброго времени суток. Сам смысл того что я делаю: есть активити, которая отображает состояние батареи, есть активити настроек и есть...

Как заставить работать BroadcastReceiver? - Программирование Android
Добрый день! Собственно идея: есть стандартный плеер телефона(HTC One m7 Android 4.4.3) и проводная гарнитура с одной кнопкой. Но по...

BroadcastReceiver, считывание состояние телефона - Программирование Android
Добрый день! Создал вот такой класс, для считывания состояния телефона во время звонка. public class CallReceiver extends...

Запуск BroadcastReceiver без активити - Программирование Android
Имеется приложение, включающее в себя единственный класс: public class MyReceiver extends BroadcastReceiver{ @Override ...

Как запустить метод в Activity из BroadcastReceiver - Программирование Android
Здравствуйте!!! Все до банальности просто и повторяется, по кругу :) Новичок, увлекся Java &amp; Android... Пытаюсь изобразить приложения...


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

Или воспользуйтесь поиском по форуму:
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
26.03.2016, 17:59     BroadcastReceiver, куда добавить код? #7
serjufa1, про дворника хорошо написал, это правильно.
Обычно этот код:
Java
1
2
3
IntentFilter mFilter = new IntentFilter("REFRESH");
mContext.registerReceiver(mMessageReceiver, mFilter);
isRegistered = true;
вставляют в активность, причём, в её onResume() метод, а в onPause() вставляют отключение receiver'а.
Поскольку здесь указан mContext, речь, видимо, идёт о регистрации не из активности, а из другого класса. Но это в общем случае. Вам же можно просто использовать MainActivity (естественно, контекстом будет сама активность, так что mContext надо будет убрать).
Также там есть ещё один недочёт. Если receiver может получать несколько разных типов сообщений, то лучше их указывать примерно так: http://stackoverflow.com/a/9128268/2914140
Java
1
2
3
IntentFilter filter = new IntentFilter();
filter.addAction("фильтр.один");
filter.addAction("фильтр.два");
Ну и, соответственно, через intent.getAction().equals("фильтр.один") обрабатывать событие.
Yandex
Объявления
26.03.2016, 17:59     BroadcastReceiver, куда добавить код?
Ответ Создать тему
Опции темы

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