Пример кода
Давайте определим файл макета и добавим две кнопки. Свяжите метод onBlick registerBroadcastReceiver с кнопкой регистрации, а метод onclick unregisterBroadcastReceiver с кнопкой отмены регистрации.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
android:layout_width='match_parent' android:layout_height='match_parent' android:orientation='vertical'> <Button android:layout_width='fill_parent' android:layout_height='wrap_content' android:padding='@dimen/padding_medium' android:text='@string/register_broadcast_receiver' android:onClick='registerBroadcastReceiver' tools:context='.RegisterUnregister' /> <Button android:layout_width='fill_parent' android:layout_height='wrap_content' android:padding='@dimen/padding_medium' android:text='@string/unregister_broadcast_receiver' android:onClick='unregisterBroadcastReceiver' tools:context='.RegisterUnregister' /></LinearLayout> |
Определите строковые константы, используемые в файле макета в файле string.xml.
|
1
2
3
4
5
6
7
|
<resources> <string name='app_name'>EnableDisableBroadcastReceiver2</string> <string name='menu_settings'>Settings</string> <string name='title_activity_enable_disable'>EnableDisable</string> <string name='register_broadcast_receiver'>Register Broadcast Receiver</string> <string name='unregister_broadcast_receiver'>Unregister Broadcast Receiver</string></resources> |
Теперь определите приемник вещания. В методе onReceive () мы покажем тостовое сообщение, содержащее текущее время. Метод onReceive () вызывается, когда передается конкретное намерение.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package com.code4reference.broadcastreceiver.enabledisable;import java.text.Format;import java.text.SimpleDateFormat;import java.util.Date;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.widget.Toast;public class UserDefinedBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //You can do the processing here update the widget/remote views. StringBuilder msgStr = new StringBuilder('Current time : '); Format formatter = new SimpleDateFormat('hh:mm:ss a'); msgStr.append(formatter.format(new Date())); Toast.makeText(context, msgStr, Toast.LENGTH_SHORT).show(); }} |
Мы собираемся определить основной класс активности под названием RegisterUnregister. В этом классе мы определим два метода onclick: registerBroadcastReceiver и unregisterBroadcastReceiver, прикрепленные с помощью кнопок Register и Unregister в файле макета соответственно. Метод registerBroadcastReceiver () регистрирует UserDefinedBroadcastReceiver для типа действия намерения TIME_TICK. Намерение TIME_TICK срабатывает каждую минуту. Как только получатель трансляции будет зарегистрирован, вы будете замечать тостовое сообщение через каждую минуту.
|
01
02
03
04
05
06
07
08
09
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
|
package com.code4reference.broadcastreceiver.enabledisable;import android.app.Activity;import android.content.IntentFilter;import android.os.Bundle;import android.view.Menu;import android.view.View;import android.widget.Toast;public class RegisterUnregister extends Activity { UserDefinedBroadcastReceiver broadCastReceiver = new UserDefinedBroadcastReceiver(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register_unregister); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_enable_disable, menu); return true; } /** * This method enables the Broadcast receiver for * 'android.intent.action.TIME_TICK' intent. This intent get * broadcasted every minute. * * @param view */ public void registerBroadcastReceiver(View view) { this.registerReceiver(broadCastReceiver, new IntentFilter( 'android.intent.action.TIME_TICK')); Toast.makeText(this, 'Registered broadcast receiver', Toast.LENGTH_SHORT) .show(); } /** * This method disables the Broadcast receiver * * @param view */ public void unregisterBroadcastReceiver(View view) { this.unregisterReceiver(broadCastReceiver); Toast.makeText(this, 'unregistered broadcst receiver', Toast.LENGTH_SHORT) .show(); }} |
Мы не будем изменять файл AndroidManifest, поскольку мы не регистрируем широковещательный приемник в файле AndroidManifest.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
package='com.code4reference.broadcastreceiver.enabledisable' android:versionCode='1' android:versionName='1.0' > <uses-sdk android:minSdkVersion='8' android:targetSdkVersion='15' /> <application android:icon='@drawable/ic_launcher' android:label='@string/app_name' android:theme='@style/AppTheme' > <activity android:name='.RegisterUnregister' android:label='@string/title_activity_enable_disable' > <intent-filter> <action android:name='android.intent.action.MAIN' /> <category android:name='android.intent.category.LAUNCHER' /> </intent-filter> </activity> </application></manifest> |
Просто завершите кодирование и выполните код, и вы увидите приложение, как показано ниже.
Вы можете получить полный исходный код в github / Code4Reference .
Ссылка: Регистрация / отмена регистрации приемника Android-вещания во время выполнения. от нашего партнера JCG Ракеша Кусата в блоге Code4Reference .
