Пример кода
Файл макета приложения.
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
|
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/start_repeating_alarm' android:onClick = 'startRepeatingAlarm' tools:context = '.EnableDisableBroadcastReceiver' /> < Button android:layout_width = 'fill_parent' android:layout_height = 'wrap_content' android:padding = '@dimen/padding_medium' android:text = '@string/cancel_alarm' android:onClick = 'cancelAlarm' tools:context = '.EnableDisableBroadcastReceiver' /> < Button android:layout_width = 'fill_parent' android:layout_height = 'wrap_content' android:padding = '@dimen/padding_medium' android:text = '@string/enable_broadcast_receiver' android:onClick = 'enableBroadcastReceiver' tools:context = '.EnableDisableBroadcastReceiver' /> < Button android:layout_width = 'fill_parent' android:layout_height = 'wrap_content' android:padding = '@dimen/padding_medium' android:text = '@string/disable_broadcast_receiver' android:onClick = 'disableBroadcastReceiver' tools:context = '.EnableDisableBroadcastReceiver' /> </ LinearLayout > |
В приведенном выше файле макета мы использовали несколько строковых констант в текстовом поле кнопок. Давайте определим эти строковые константы в string.xml, как показано ниже.
1
2
3
4
5
6
7
8
9
|
< resources > < string name = 'app_name' >EnableDisableBroadcastReceiver</ string > < string name = 'enable_broadcast_receiver' >Enable Broadcast Receiver</ string > < string name = 'disable_broadcast_receiver' >Disable Broadcast Receiver</ string > < string name = 'start_repeating_alarm' >Start Repeating Alarm</ string > < string name = 'cancel_alarm' >Cancel Alarm</ string > < string name = 'menu_settings' >Settings</ string > < string name = 'title_activity_enable_disable_boradcast_receiver' >EnableDisableBoradcastReceiver</ string > </ resources > |
Приемник вещания
Мы собираемся использовать AlarmManager, чтобы установить повторяющуюся тревогу, которая в конечном итоге отправляет намерение через определенный интервал времени. Прочтите этот пост, чтобы узнать больше о AlarmManager. Теперь создайте класс AlarmManagerBroadcastReceiver для расширения класса BroadcastReceiver. Содержание класса приведено ниже.
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
|
package com.code4reference.enabledisablebroadcastreceiver; 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.os.PowerManager; import android.widget.Toast; public class AlarmManagerBroadcastReceiver extends BroadcastReceiver { final public static String ONE_TIME = 'onetime' ; @Override public void onReceive(Context context, Intent intent) { //You can do the processing here update the widget/remote views. StringBuilder msgStr = new StringBuilder(); //Format time. Format formatter = new SimpleDateFormat( 'hh:mm:ss a' ); msgStr.append(formatter.format( new Date())); Toast.makeText(context, msgStr, Toast.LENGTH_SHORT).show(); } } |
Включить / отключить широковещательный приемник
Теперь мы определим основное действие, которое использует alarmManager для установки повторяющегося сигнала тревоги. Повторяющийся сигнал будет транслироваться через каждые 3 секунды. Этот сигнал тревоги был установлен в методе setRepeatingAlarm () ниже.
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
package com.code4reference.enabledisablebroadcastreceiver; import com.example.enabledisablebroadcastreceiver.R; import android.app.Activity; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; import android.view.View; import android.widget.Toast; public class EnableDisableBroadcastReceiver extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); } /** * This method gets called when 'Start Repeating Alarm' button is pressed. * It sets the repeating alarm whose periodicity is 3 seconds. * @param view */ public void startRepeatingAlarm(View view) { AlarmManager am=(AlarmManager) this .getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent( this , AlarmManagerBroadcastReceiver. class ); PendingIntent pi = PendingIntent.getBroadcast( this , 0 , intent, 0 ); //After after 2 seconds am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 4 , pi); Toast.makeText( this , 'Started Repeating Alarm' , Toast.LENGTH_SHORT).show(); } /** * This method gets called when 'cancel Alarm' button is pressed. * This method cancels the previously set repeating alarm. * @param view */ public void cancelAlarm(View view) { Intent intent = new Intent( this , AlarmManagerBroadcastReceiver. class ); PendingIntent sender = PendingIntent.getBroadcast( this , 0 , intent, 0 ); AlarmManager alarmManager = (AlarmManager) this .getSystemService(Context.ALARM_SERVICE); alarmManager.cancel(sender); Toast.makeText( this , 'Cancelled alarm' , Toast.LENGTH_SHORT).show(); } /** * This method enables the Broadcast receiver registered in the AndroidManifest file. * @param view */ public void enableBroadcastReceiver(View view){ ComponentName receiver = new ComponentName( this , AlarmManagerBroadcastReceiver. class ); PackageManager pm = this .getPackageManager(); pm.setComponentEnabledSetting(receiver, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); Toast.makeText( this , 'Enabled broadcast receiver' , Toast.LENGTH_SHORT).show(); } /** * This method disables the Broadcast receiver registered in the AndroidManifest file. * @param view */ public void disableBroadcastReceiver(View view){ ComponentName receiver = new ComponentName( this , AlarmManagerBroadcastReceiver. class ); PackageManager pm = this .getPackageManager(); pm.setComponentEnabledSetting(receiver, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); Toast.makeText( this , 'Disabled broadcst receiver' , Toast.LENGTH_SHORT).show(); } } |
Мы добавляем AlarmManagerBroadcastReceiver в файл манифеста. Это регистрирует Broadcast Receiver.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
package = 'com.example.enabledisablebroadcastreceiver' android:versionCode = '1' android:versionName = '1.0' > < uses-sdk android:minSdkVersion = '15' android:targetSdkVersion = '15' /> < application android:icon = '@drawable/ic_launcher' android:label = '@string/app_name' android:theme = '@style/AppTheme' > < activity android:name = 'com.code4reference.enabledisablebroadcastreceiver.EnableDisableBroadcastReceiver' android:label = '@string/title_activity_enable_disable_boradcast_receiver' > < intent-filter > < action android:name = 'android.intent.action.MAIN' /> < category android:name = 'android.intent.category.LAUNCHER' /> </ intent-filter > </ activity > <!-- Broadcast receiver --> < receiver android:name = 'com.code4reference.enabledisablebroadcastreceiver.AlarmManagerBroadcastReceiver' /> </ application > </ manifest > |
После этого выполните код, и вы увидите приложение, как показано ниже.
Вы можете получить полный исходный код в github / Code4Reference . Вы можете найти больше учебных пособий по Android здесь.
Ссылка: Включите и отключите приемник Broadcast во время выполнения от нашего партнера JCG Ракеша Кусата в блоге Code4Reference .