Полезные примеры Android

Полезные примеры Android
Android — Приемники вещания «Broadcast Receivers»

Приемники широковещательной передачи просто отвечают на широковещательные сообщения из других приложений или самой системы. Эти сообщения иногда называют событиями или намерениями. Например, приложения могут также инициировать широковещательные рассылки, чтобы сообщить другим приложениям, что некоторые данные были загружены на устройство и доступны для их использования, поэтому это широковещательный приемник, который перехватит это сообщение и инициирует соответствующее действие.

Чтобы заставить BroadcastReceiver работать для целей системного вещания, необходимо выполнить два важных шага:

  • Создание широковещательного приемника.

  • Регистрация широковещательного приемника

Есть еще один дополнительный шаг, если вы собираетесь реализовать свои собственные намерения, тогда вам нужно будет создать и транслировать эти намерения.

Создание приемника вещания

Приемник широковещания реализован как подкласс класса BroadcastReceiver и переопределяет метод onReceive (), в котором каждое сообщение принимается как параметр объекта Intent .

открытый класс MyReceiver расширяет BroadcastReceiver { @Override public void onReceive ( контекст контекста , намерение намерения ) { Toast . makeText ( context , «Обнаружено намерение.» , Toast . LENGTH_LONG ). шоу (); } }     

Регистрация широковещательного приемника

Приложение прослушивает определенные намерения вещания, регистрируя приемник вещания в файле AndroidManifest.xml . Предположим, мы собираемся зарегистрировать MyReceiver для сгенерированного системой события ACTION_BOOT_COMPLETED, которое запускается системой после того, как система Android завершит процесс загрузки.

трансляция

Вещательный приемник

<application android: icon = "@ drawable / ic_launcher" android: label = "@ string / app_name" android: theme = "@ style / AppTheme" > < Receiver android: name = "MyReceiver" >
<intent-filter> <action android: name = "android.intent.action.BOOT_COMPLETED" > </action> </intent-filter>
</receiver> </application>

Теперь всякий раз, когда ваше устройство Android загружается, оно будет перехвачено BroadcastReceiver MyReceiver и будет выполняться реализованная логика внутри onReceive () .

Есть несколько событий, генерируемых системой, которые определены как конечные статические поля в классе Intent . В следующей таблице перечислены несколько важных системных событий.

Sr.No Константа и описание события
1

android.intent.action.BATTERY_CHANGED

Липкая трансляция, содержащая состояние зарядки, уровень и другую информацию об аккумуляторе.

2

android.intent.action.BATTERY_LOW

Указывает на низкий уровень заряда батареи устройства.

3

android.intent.action.BATTERY_OKAY

Указывает, что батарея в норме после низкого уровня заряда.

4

android.intent.action.BOOT_COMPLETED

Он транслируется один раз после завершения загрузки системы.

5

android.intent.action.BUG_REPORT

Показать активность для сообщения об ошибке.

6

android.intent.action.CALL

Выполните звонок кому-то, указанному в данных.

7

android.intent.action.CALL_BUTTON

Пользователь нажал кнопку «позвонить», чтобы перейти к программе набора номера или другому соответствующему пользовательскому интерфейсу для выполнения вызова.

8

android.intent.action.DATE_CHANGED

Дата изменилась.

9

android.intent.action.REBOOT

Перезагрузите устройство.

Трансляция настраиваемых намерений

Если вы хотите, чтобы ваше приложение само генерировало и отправляло настраиваемые намерения, вам нужно будет создать и отправить эти намерения с помощью метода sendBroadcast () внутри вашего класса активности. Если вы используете метод sendStickyBroadcast (Intent) , Intent является липким , то есть отправляемое Intent остается после завершения трансляции.

public void broadcastIntent ( Просмотр представления ) { Intent intent = new Intent (); 
намерение . setAction ( "com.tutorialspoint.CUSTOM_INTENT" ); 
sendBroadcast ( намерение ); }  

Это намерение com.tutorialspoint.CUSTOM_INTENT также можно зарегистрировать аналогично тому, как мы зарегистрировали намерение, созданное системой.

<application android: icon = "@ drawable / ic_launcher" android: label = "@ string / app_name" android: theme = "@ style / AppTheme" > < Receiver android: name = "MyReceiver" >
<intent-filter> <action android: name = "com.tutorialspoint.CUSTOM_INTENT" > </action> </intent-filter>
</receiver> </application>

пример

Этот пример объяснит вам, как создать BroadcastReceiver для перехвата настраиваемого намерения. Когда вы познакомитесь с настраиваемым намерением, вы можете запрограммировать свое приложение на перехват сгенерированных системой намерений. Итак, давайте выполним следующие шаги, чтобы изменить приложение Android, которое мы создали в главе примера Hello World :

Шаг Описание
1 Вы будете использовать Android studio для создания Android-приложения и назовете его My Application в пакете com.example.tutorialspoint7.myapplication, как описано в главе « Пример Hello World» .
2 Измените файл основного действия MainActivity.java, чтобы добавить метод broadcastIntent () .
3 Создайте новый файл Java с именем MyReceiver.java в пакете com.example.tutorialspoint7.myapplication, чтобы определить BroadcastReceiver.
4 Приложение может обрабатывать одно или несколько пользовательских и системных намерений без каких-либо ограничений. Каждое намерение, которое вы хотите перехватить, должно быть зарегистрировано в вашем файле AndroidManifest.xml с помощью тега <Receiver … />.
5 Измените содержимое файла res / layout / activity_main.xml по умолчанию, чтобы включить кнопку для трансляции намерения.
6 Нет необходимости изменять строковый файл, студия Android позаботится о файле string.xml.
7 Запустите приложение, чтобы запустить эмулятор Android и проверить результат изменений, внесенных в приложение.

Ниже приводится содержимое измененного файла основного действия MainActivity.java . Этот файл может включать каждый из основных методов жизненного цикла. Мы добавили метод broadcastIntent () для трансляции настраиваемого намерения.

пакет com . пример . tutorialspoint7 . мое приложение ;
импортировать android . приложение . Активность ; импортировать android . содержание . Намерение ; импортировать android . os . Связка ; импортировать android . вид . Просмотр ;
открытый класс MainActivity расширяет Activity {     
/ ** Вызывается при первом создании действия. * / @Override
public void onCreate ( Bundle savedInstanceState ) { супер . onCreate ( savedInstanceState ); 
setContentView ( R . компоновки . activity_main ); }  
// транслировать пользовательское намерение.
public void broadcastIntent ( Просмотр представления ) { Intent intent = new Intent (); 
намерение . setAction ( "com.tutorialspoint.CUSTOM_INTENT" ); sendBroadcast ( намерение ); } } 

Ниже приводится содержимое MyReceiver.java :

пакет com . пример . tutorialspoint7 . мое приложение ;
импортировать android . содержание . BroadcastReceiver ; импортировать android . содержание . Контекст ; импортировать android . содержание . Намерение ; импортировать android . виджет . Тост ;
/**
* Создано TutorialsPoint7 23.08.2016.
* / открытый класс MyReceiver расширяет BroadcastReceiver { @Override public void onReceive ( контекст контекста , намерение намерения ) { Toast . makeText ( context , «Обнаружено намерение.» , Toast . LENGTH_LONG ). шоу (); } }

Далее будет измененное содержимое файла AndroidManifest.xml . Здесь мы добавили тег <Receiver … />, чтобы включить нашу службу:

<? xml version = "1.0" encoding = "utf-8" ?> <manifest xmlns: android = "http://schemas.android.com/apk/res/android" package = "com.example.tutorialspoint7.myapplication" >
<application android: allowBackup = "true" android: icon = "@ mipmap / ic_launcher" android: label = "@ string / app_name" android: supportsRtl = "true" android: theme = "@ style / AppTheme" >
<activity android: name = ".MainActivity" > <intent-filter> <action android: name = "android.intent.action.MAIN" /> 
<category android: name = "android.intent.category.LAUNCHER" /> </intent-filter> </activity>  
< Receiver android: name = "MyReceiver" > <intent-filter> <action android: name = "com.tutorialspoint.CUSTOM_INTENT" > </action> </intent-filter> 
</receiver> </application>
</manifest>

Ниже будет содержимое файла res / layout / activity_main.xml, чтобы включить кнопку для трансляции нашего настраиваемого намерения —

<RelativeLayout xmlns: android = "http://schemas.android.com/apk/res/android" xmlns: tools = "http://schemas.android.com/tools" android: layout_width = "match_parent" android: layout_height = "match_parent" андроид: paddingLeft = "@ DIMEN / activity_horizontal_margin" андроид: paddingRight = "@ DIMEN / activity_horizontal_margin" андроид: paddingTop = "@ DIMEN / activity_vertical_margin" андроид: paddingBottom = "@ DIMEN / activity_vertical_margin" инструменты: контекст = ». Основное занятие"> 
<TextView android: id = "@ + id / textView1" android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: text = "Пример трансляции" android: layout_alignParentTop = "true" android: layout_centerHorizontal = "true" android: textSize = "30dp" />
<TextView android: id = "@ + id / textView2" android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: text = "Tutorials point" android: textColor = "# ff87ff09" android: textSize = "30dp" android: layout_above = "@ + id / imageButton" android: layout_centerHorizontal = "true" android: layout_marginBottom = "40dp" />
<ImageButton android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: id = "@ + id / imageButton" android: src = "@ drawable / abc" android: layout_centerVertical = "true" android: layout_centerHorizontal = "true " />
<Button android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: id = "@ + id / button2" android: text = "Broadcast Intent" android: onClick = "broadcastIntent" android: layout_below = "@ + id / imageButton " android: layout_centerHorizontal = " true " />
</RelativeLayout>

Попробуем запустить наш модифицированный Hello World! приложение, которое мы только что изменили. Я предполагаю, что вы создали свой AVD при настройке среды. Чтобы запустить приложение из студии Android, откройте один из файлов активности вашего проекта и щелкните Значок запуска Eclipseзначок « Выполнить» на панели инструментов. Android Studio устанавливает приложение на ваш AVD и запускает его, и если с вашей настройкой и приложением все в порядке, оно отобразит следующее окно эмулятора —

Демоверсия Android Broadcast

Теперь, чтобы транслировать наше настраиваемое намерение, давайте нажмем кнопку Broadcast Intent , это будет транслировать наше настраиваемое намерение com.tutorialspoint.CUSTOM_INTENT, которое будет перехвачено нашим зарегистрированным BroadcastReceiver, то есть MyReceiver, и согласно нашей реализованной логике внизу появится тост симулятора следующим образом —

Android Broadcast Intent

Вы можете попробовать реализовать другой BroadcastReceiver для перехвата сгенерированных системой намерений, таких как загрузка системы, изменение даты, низкий заряд батареи и т. Д.

Select the fields to be shown. Others will be hidden. Drag and drop to rearrange the order.
  • Image
  • SKU
  • Rating
  • Price
  • Stock
  • Availability
  • Add to cart
  • Description
  • Content
  • Weight
  • Dimensions
  • Additional information
  • Attributes
  • Custom attributes
  • Custom fields
Click outside to hide the compare bar
Compare