Непознанное

Как отключить широковещательные сообщения. Широковещательная передача сообщений

Ребята, новый тел купила Леново С 2 и прут смски с сотовым вещанием! практически не останавливаясь, стоит только зайти в радиус передачи от своего роутера! подскажите, как это убрать, пожалуйста, это невозможно! 18 октября 2016

Решил проблему спустя пол дня на а 1000 зайдя в сообщения и в верхнем правом углу нажал настройки и дальше по накатаной, радиовещание, ис- сообщения, убрал галки и вуаля 17 августа 2016

мне не давно поставили опертатора мтс и когда мобильная сеть есть по 1000 штук хорошо что я в деревне где в некоротых местах ловит мтс но проблемма решена так на телефоне алкателье заходим в сим-меню далее мтс новости ешё дополнительно и рассылка выкл и все кручу задом что у меня ничего не приходит 4 июля 2016

у меня BQ5009. ни один из описанных способов не помогает. Оператор ссылается на телефон, представители марки и салон - на оператора. как быть? нет в настройках телефона такой опции "широковещательные смс" или оповещения. хелп.. 7 апреля 2016

в Lenovo A1000 надо набрать *#*#83781#*#* -- App.settings -- CellBroadcast -- выкл на обеих симках, но помагает не на долго, по несколько раз на день надо проверять и повторно выкл. 8 февраля 2016

Леново а1000+ помогло до определённого момента, звонил в Леново, кричат на гугл и типо это не гарантийный ремонт, тел купил 24 ноября а в декабре начал хулиганить, у жены на 4 дроиде этого нет. Думаю сотрудники леново не компетентных. Перепробовал все, не помогло. Разговор с сотрудником Леново завёл меня в тупик. Быбший программист компов и телы шил разные, а тут тупик! 12 января 2016

Телефон RitZviva S500C. Оповещения населения приходили каждую секунду. Все галочки где только можно сняты и всё остальное испробовано. Помогло только встака ещё одной симки другого оператора в дгугой слот. 9 января 2016

СПАСИБО! матушка купила телефон леново, и чуть не сошла с ума от постоянных оповещений! они ей приходили со сбитой кодировкой - сплошные кракязябры, вообще не понятно что, от кого и самим найти где отключать не реально. 12 декабря 2015

lenovo A1000+ мегафон, всё как у авторов выше, широковещательные информационные сообщения с заглавием "оповещение населения" в дикой кодировке, которые валят по 20 штук в минуту и не прекращаются. Убрала все галки в настройках, это не подействовало. Сбросила телефон до заводских настроек и снова убрала, не подействовало. Звонила в "Мегафон", сказали это проблема телефона. Переставила сим-карту в слот для второй сим-карты, ПОМОГЛО, оповещения валить перестали. Но я теперь не могу пользоваться мобильным интернетом, так что полноценным решением это не считаю. 27 ноября 2015

Леново А1000 в день до 2000 тысяч этих оповещений, у меня МегаФон. Я не долго думая сходил в салон МегаФона и мне там сказали что это из-за симки типо леново бунтует против МегаФона и это ни как не исправить только если симку вставить во второй слот и купить другую для инета,it-гуру в МегаФоне сказал что у флая такая проблема вообще не излечима 23 ноября 2015

У меня планшет Супра. Оповещения населения Достало это спам и мусор. В настройках все отключено и само приложение чертовое тоже постоянно останавливаю и все Бесполезно!... Добрые люди, прошу вас помогите от этой напасти избавиться в конце то концов. ?!... Это Невозможно пачками идут с какими то знаками, а прямого текста нету. Заранее Благодарю!...

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

Впервые это новшество в сфере высоких технологий было продемонстрировано в Париже. Передача сообщений для клиентов определённого оператора имеет не только минусы (оповещения, которые могут приходить каждую минуту раздражают), но и плюсы: например, с помощью массовой смс-рассылки можно оповестить значительную часть населения о возникновении чрезвычайной ситуации, к примеру.

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

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

В этом разделе мы объясним, как отключить оповещения пользователей, они же широковещательные сообщения.

Речь пойдёт об android Samsung Galaxy S2 I9 100. О проблеме, связанной с доставкой малополезных сообщений после установки прошивки сталкивается достаточное количество пользователей android.

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

Однако, секрет достаточно прост: нужно зайти в «Настройки приложения сообщений» снять «галочку» в разделе «Сообщения сети».

Если же пользуетесь таким вариантом android как Samsung Galaxy S3 mini, то, помимо удаления «галочек» или «точек» из настроек сообщений, можно воспользоваться сторонним софтом.

Отключить появления сводящих с ума владельца дорогого гаджета смс можно с помощью программ «TitaniumBackup».


Рассмотрим аналогичный пример с android LenovoK 910. Отключить поток сообщений в этом случае также возможно несколькими способами.

Начнём со «стандартного» для таких случаев порядка действий:

  1. Заходим в «Приложения»;
  2. Затем переходим на вкладку «Оповещения»;
  3. Находим «Оповещения населения» и снимаем «галочку» напротив «Отключить».

Помните, что пункт «Оповещение населения» отмечен, как правило, значком рупора. Если такого значка в вашей модели телефона нет, то можно переставит сим-карту в аппарат, который отображает раздел «экстренных оповещений».

В упомянутом выше случае лавина сообщений прекратит вас донимать.

Последний способ, который мы хотели бы назвать – прошивка гаджета кастом сборки «Dr. Oweida 4. 4. 2».

Fly

Рассмотрим исключение услуги широковещательного смс для гаджета fly iq436i. Для того чтобы избавиться от ненужных сообщений, которые способны кого угодно лишить спокойствия, нужно произвести ряд действий, указанный ниже.

Первое: откройте «Меню» затем выберите «Сообщения», следом затем перейдите в «Опции». К слову сказать, раздел «Опции» обозначен сенсорной клавишей в виде прямоугольника.

После этого нужно выбрать вкладку «ИС-сообщений», снова «Опции», следом за этим выбираем пункт «Настройки».

Выбираем сим-карту и снимаем «галочку» напротив надписи «Радиопередача смс включена». Дополнительной «страховкой» в этом случае будет и звонок оператору связи для уточнения не подключена ли дополнительная услуга.

Ещё один способ избежать надоевших смс

Более грамотные пользователи отмечают, что после установки прошивки от Cyanogenmod, автоматически включается функция экстренного оповещения населения. Отмечается также, что после этого на многих устройствах появляются «чистые» смс с заголовком «Оповещение населения».

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

Для полного отключения функции по извещению пользователей, требуются права «root» на устройстве.

Когда отправляется пакет всем узлам сети, его называют — широковещательным пакетом и он имеет специальные широковещательный адрес. При получении такого пакета, узел анализирует широковещательный адрес и понимает, что он является адресом назначения. И так думает каждый узел в сети.

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

  • Запрос адреса неизвестного устройства
  • Отображения адресов верхнего уровня к адресам нижнего уровня
  • Обмен данными о маршрутах между протоколами маршрутизации

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

Направленная широковещательная передача

Направленная широковещательная передача может передавать пакеты всем узлам любой одной сети. Можно отправлять пакеты за пределы своей сети в другую. Если узлу нужно передать пакеты всем узлам сети 171.15.5.0/24, то он пишет адрес пакеты назначения — 171.15.5.255. Хоть и по умолчанию маршрутизаторы не реализуют такую функцию, их можно настроить для такой передачи.

Ограниченная широковещательная передача

Ограниченная широковещательная передача реализуется для коммуникации, которая ограничена одной локальной сетью. Пакеты используют адрес — IPv4 255.255.255.255 и маршрутизаторы такие пакеты не выпустят из локальной сети 🙂

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

Датаграммные сокеты не гарантируют доставку пакетов данных, но работают быстрее потоковых и обеспечивают возможность широковещательной рассылки пакетов данных одновременно всем узлам сети. Для работы с такими сокетами приложение должно создать объект класса DatagramSocket, а также подготовить объект класса DatagramPacket. В него будет записан блок данных, принятый от партнера по сети.

В классе DatagramSocket имеются два конструктора, прототипы которых представлены ниже:

public DatagramSocket(int port); public DatagramSocket();

Первый из этих конструкторов позволяет определить порт для сокета, второй предполагает использование любого свободного порта.

Канал, а также входные и выходные потоки создавать не нужно. Данные передаются и принимаются методами send и receive, определенными в классе DatagramSocket:

public void send(DatagramPacket p); public void receive(DatagramPacket p);

В качестве параметра этим методам передается ссылка на пакет данных (соответственно, передаваемый и принимаемый), определенный как объект класса DatagramPacket.

После использования сокет нужно закрыть методом close:

public void close();

Перед тем как принимать или передавать данные с использованием методов receive и send вы должны подготовить объекты класса DatagramPacket. Метод receive запишет в такой объект принятые данные, а метод send - перешлет данные из объекта класса DatagramPacket узлу, адрес которого указан в пакете.

Подготовка объекта класса DatagramPacket для приема пакетов выполняется с помощью следующего конструктора:

public DatagramPacket(byte buf, int length);

Если вам нужно подготовить пакет для передачи, воспользуйтесь конструктором, который дополнительно позволяет задать адрес IP iaddr и номер порта port узла назначения:

public DatagramPacket(byte buf, int length, InetAddress iaddr, int port);

Информация о том, в какой узел и на какой порт необходимо доставить пакет данных, хранится не в сокете, а в пакете, то есть в объекте класса DatagramPacket.

Описание примера

Приложение DatagramChat, исходный текст которого мы рассмотрим в этом разделе, предназначено для широковещательной рассылки сообщений в локальной сети TCP/IP. Оно одновременно выполняет роль клиента и сервера (рис. 1).

Рис. 1. Главное окно приложения DatagramChat

Сразу после запуска в окне многострочного текстового редактора, расположенном в левом верхнем углу главного окна программы, появляется сообщение об успешном или неуспешном открытии датаграммного сокета с номером 9997.

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

Чтобы послать сообщение на все рабочие станции сети, его нужно набрать в однострочном редакторе и затем нажать кнопку Send.

Сообщение будет продублировано в окне программы с префиксом ":". Его примут все рабочие станции, в том числе и та, откуда это сообщение было отправлено. Принимаемые сообщения отмечаются стрелочкой.

Перейдем к описанию исходного текста.

Главный класс приложения DatagramChat

Метод main, определенный в главном классе приложения DatagramChat, создает окно приложения как объект класса FrameWindow:

import java.awt.*; import java.awt.event.*; import java.net.*; import java.io.*; public class DatagramChat { public static void main(String args) { FrameWindow frame; frame = new FrameWindow("Datagram chat"); frame.setVisible(true); } }

Это окно затем отображается методом setVisible.

Класс FrameWindow

Данный класс создан на базе класса Frame:

class FrameWindow extends Frame implements ActionListener, WindowListener { . . . }

В нем мы определили поля, конструктор и несколько методов.

TextArea taConsole; TextField tfCommand;

Следующие два поля предназначены для хранения ссылок на кнопки Exit и Save:

Button btExit; Button btSend;

Для исключения блокирования приложения прием широковещательных сообщений выполняется в отдельном потоке. Поле sThread хранит ссылку на соответствующий класс:

ServerThread sThread = null; static DatagramSocket s; static DatagramPacket dp;
Конструктор класса FrameWindow

В задачу конструктора входит создание всех необходимых компонент (редакторов текста и кнопок), а также добавление этих компонент в главное окно приложения. Компоненты добавляются в режиме размещения GridBagLayout.

Заметим, что сразу после инициализации кнопка Send блокируется конструктором класса FrameWindow:

btSend.setEnabled(false);

После этого конструктор запускает поток приема сообщений:

sThread = new ServerThread(this); sThread.start();

И, наконец, последнее действие - получение датаграммного сокета для приема сообщений:

try { s = new DatagramSocket(); } catch(Exception ex) { System.out.println(ex.toString()); }
Метод actionPerformed класса FrameWindow

Когда пользователь нажимает кнопку Send, метод actionPerformed извлекает из однострочного редактора текст передаваемого сообщения, выводит его в окно программы методом consolePrint, а затем передает методу sendString:

if(e.getSource().equals(btSend)) { String szSended = tfCommand.getText(); consolePrint("\n:" + szSended); try { sendString(szSended); } catch(Exception ex) { System.out.println(ex.toString()); } }

Метод sendString посылает пакет на все рабочие станции сети с применением датаграммных сокетов.

Метод sendString класса FrameWindow

Исходный текст метода sendString достаточно прост:

static void sendString(String str) throws IOException { byte buf = str.getBytes(); dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("255.255.255.255"), 9997); s.send(dp); }

Передаваемая строка сначала преобразуется в массив байт buf. Заметим, что в массив записываются символы UNICODE.

Далее метод sendString создает датаграммный пакет класса DatagramPacket, передавая соответствующему конструктору ссылку на буфер с данными, размер этого буфера, а также адрес IP специального вида для передачи широковещательных пакетов - 255.255.255.255.

Подготовленный пакет передается на сокете s методом send. Напомним, что сокет s предназначен для передачи сообщений и создается конструктором класса FrameWindow.

Класс ServerThread

Класс ServerThread создан на базе класса Thread:

class ServerThread extends Thread { . . . }

В поле frame, определенном в этом классе, мы храним ссылку на родительское окно:

FrameWindow frame;

Поле s используется для хранения сокета, на котором выполняется прием широковещательных сообщений:

DatagramSocket s;
Конструктор класса ServerThread
public ServerThread(FrameWindow fr) { frame = fr; }
Метод run класса ServerThread

Этот метод работает в отдельном потоке и занимается приемом широковещательных сообщений.

Сразу после инициализации он разблокирует кнопку Send и затем пытается создать серверный сокет:

try { frame.btSend.setEnabled(true); s = new DatagramSocket(9997); . . . } catch(SocketException se) { frame.consolePrint("!Server socket could not be opened\n"); stop(); s.close(); } catch(Exception ex) { stop(); s.close(); }

В процессе создания серверного сокета возможно возникновение исключения SocketException (например, если сокет с указанным номером уже занят другой копией нашего приложения). Соответствующий обработчик выводит сообщение об ошибке в окно программы и останавливает поток приема сообщений.

При удачном получении сокета метод run запускает цикл чтения поступающих широковещательных сообщений:

frame.consolePrint("!Server socket opend\n"); while(true) { String szStr = recvString(s); frame.consolePrint("\n--->" + szStr); }

Принятые сообщения отображаются в окне программы методом consolePrint.

Метод recvString класса ServerThread

Прием широковещательных сообщений выполняется методом recvString:

static String recvString(DatagramSocket s) throws IOException { DatagramPacket dp; byte buf = new byte; dp = new DatagramPacket(buf, 512); s.receive(dp); String szBuf = new String(buf); return szBuf; }

Вначале этот метод готовит пакет класса DatagramPacket, передавая соответствующему конструктору адрес и размер буфера, предназначенного для приема данных.

Затем вызывается метод receive, который и выполняет прием данных.

Принятые данные преобразуются в строку UNICODE и возвращаются вызывающему методу.

* Приложения для Android состоят из одного или нескольких компонентов: Activities (Деятельности), Services (Службы), Content Providers (Поставщики данных), а также Broadcast Receivers (Получатели широковещательных сообщений).

* Каждый компонент выполняет свою роль в приложении и может быть активирован отдельно от других (причём активирован может быть даже сторонним приложением).

* В AndroidManifest.xml (файл манифеста) должны быть объявлены все компоненты приложения и системные требования, такие как необходимая минимальная версия Android или определённая аппаратная конфигурация.

* Необходимые для приложения ресурсы (изображения, файлы разметки, строки и т.д.) должны содержать альтернативные варианты для различных конфигураций устройств (например, строки на разных языков или различные разметки и изображения для возможных размеров экрана).

Данный текст является переводом (хотя и немного вольным) статьи из официальной документации по Android .

Примечание: некоторые слова в тексте оставлены по-английски, потому что, эти термины совпадают с названиями классов с помощью которых они реализуются и их перевод только усложняет понимание (в скобках написан их буквальный перевод).


Основы
Android-приложения написаны на языке программирования Java. Инструмент Android SDK (Software Development Kit — комплект разработки программного обеспечения) компилирует код вместе со всеми данными и файлами ресурсов в пакет Android - архивный файл с расширением.apk. Этот файл позволяет установить приложение на любом устройстве под управлением системы Android.

После установки на устройстве, каждое приложение живёт в своей собственной изолированной программной среде:


  • Операционная система Android является многопользовательской Linux-системой, в которой каждое приложение это отдельный пользователь.

  • По умолчанию, система присваивает каждому приложению уникальный идентификатор пользователя userid (который используется только системой). Система устанавливает разрешения для всех файлов приложения таким образом, чтобы только определённый пользователь (с определённым userid) мог получить к ним доступ.

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

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

Таким образом, система Android реализует принцип наименьших привилегий. То есть, каждое приложение по умолчанию имеет доступ только к компонентам, которые необходимы для его работы и не более того. Однако, существуют способы обмена данными между приложениями и получения доступа к системным сервисам:

  • Возможно раздать двум приложениям одинаковые идентификаторы пользователей (userid), в этом случае они могут получить доступ к файлам друг друга. Для экономии системных ресурсов приложения с тем же идентификатором также могут быть запущены в одном процессе и использовать одну виртуальную машину. Такие приложения должны быть подписаны на один и тот же сертификат.

  • Приложение может запросить разрешение на доступ к системным данным, таким как контакты пользователя, SMS сообщения, карточка хранения (SD), камера, Bluetooth и многое другое. Все запросы доступа должны быть разрешены пользователем во время установки.

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

Существуют четыре типа компонентов приложения. Каждый из них служит различным целям и имеет свой жизненный цикл, который определяет, как компонент создаётся и уничтожается.

Activity (Деятельность)
Activity представляет собой один экран с пользовательским интерфейсом. Например, приложение электронной почты, может иметь одну Activity, которая показывает список новых сообщений электронной почты, другую для создания нового сообщения, и ещё одну для чтения письма. Хотя все они работают вместе в рамках одного приложения, каждая из них независима от других. Таким образом, другие приложения могут вызвать любую из этих Activity (если почтовое приложение позволяет это). Например, приложение камеры может открыть Activity в которой создаётся новое сообщение, чтобы пользователь мог отправить фотографии по почте.

Service (Служба)
Service это компонент, который работает в фоновом режиме и не имеет пользовательского интерфейса. Службы используются для обработки длительных операций или для выполнения удалённых процессов. Например, Service может воспроизводить музыку в фоновом режиме или получать данные по сети, не блокируя взаимодействие пользователя с работающим приложением. Service могут запустить другие компоненты, например Activity, и затем взаимодействовать с ней.

Content provider (Поставщик данных)
Content provider управляет данными приложения. Данные можно хранить в файловой системе, базе данных SQLite, в Интернете или любом другом доступном для приложения месте хранения. Через Content providers другие приложения могут запрашивать или даже изменить данные (если на это есть права доступа). Например, в операционной системе Android существует Content provider, который управляет списком контактов пользователя. Таким образом, любое приложение, с соответствующими разрешениями могут запрашивать информацию о конкретном человеке для чтения или записи. Content provider также можно использовать для чтения и записи данных, которые доступны только для одного приложения.

Broadcast receivers (Получатель широковещательных сообщений)
Broadcast receiver - компонент, который позволяет принимать широковещательные сообщения операционной системы. Такими сообщениями являются, например, объявления о том, что экран выключился, батарея разряжена или был сделан фотоснимок. Такие сообщения также могут посылаться пользовательскими приложениями, например, уведомления о том, что некоторые данные были загружены и готовы к использованию. Хотя Broadcast receiver не имеют пользовательского интерфейса, он может создавать уведомления в строке состояния. Однако, чаще всего Broadcast receiver это просто "шлюз" для других компонентов, например, он может запускать Service для обработки определённых событий.

Уникальной особенностью системы Android является то, что любое приложение может запустить компоненты другого приложения. Если необходимо дать пользователю возможность сделать фотографию, то не обязательно это реализовывать, можно вызвать уже существующее приложение. После завершения оно вернёт созданную фотографию в ваше приложение для дальнейшего использования. Для пользователя это будет выглядеть как одно приложение.

Для запуска любого компонента операционная система начинает новый процесс (если его ещё не было) и инициализирует классы, необходимые для компонента. Например, если в вашем приложении запускается Activity для работы с камеры (принадлежащая стороннему приложению), то она запускается в отдельном процессе, который принадлежит этому стороннему приложению, а не в процессе вашего приложения. Поэтому, в отличие от приложений на большинство других систем, приложений Android не имеют единую точку входа (нет функции main()).

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

Активация компонентов
Три из четырёх типов компонентов — Activity (деятельность), Service (сервис), а также Broadcast receivers (получатель широковещательных сообщений) — активируются с помощью асинхронного сообщения Intent (намерение). Intent связывает отдельные компоненты друг с другом во время выполнения, будь то компонент принадлежащий вашему приложению или другой.

Intent (намерение) создаётся с помощью класса Intent, который описывает запрос на активацию конкретного компонента или конкретного типа компонента, соответственно Intent может быть явным или неявным.

Для Activity и Service, Intent(намерение) определяет действие, которое надо выполнить (например, "Просмотреть" или "Отправить" что-то), и может указать URI (Uniform Resource Identifier — унифицированный идентификатор ресурса) данных необходимых для выполнения. Например, Intent может передать запрос Activity показать изображение или открыть веб-страницу.
Для broadcast receivers Intent просто определяет транслируемые сообщения (например, широковещательное сообщения о том, что аккумулятор разряжен содержит только строковую константу обозначающую "батарея разряжена").
Последний компонент - Content provider не активируется с помощью Intent. Хотя он и может вызывается, если Content provider запрашивает данные из ContentResolver.

Методы для активации каждого типа компонентов:


  • Для запуска Activity используются методы startActivity(Intent intent) или startActivityForResult(Intent intent) (если необходимо вернуть результат).

  • Для запуска Service вызывается метод startService (Intent service).

  • Для запуска Broadcast reciever — sendBroadcast(Intent intent), sendOrderedBroadcast(Intent intent, String receiverPermission), или sendStickyBroadcast(Intent intent).

  • Для формирования запроса для Content Provider используется метод query ()

Файл манифеста
Перед запуском любого компонента операционная система Android читает файл манифеста приложения AndroidManifest.xml, чтобы убедиться, что запускаемый компонент существует. В этом файле должны быть объявлены все компоненты приложения, которые находятся в корневой папке приложения.

Кроме этого манифест-файл выполняет другие функции:

  • Определяет пользовательские разрешения, такие как доступ в Интернет или чтение контактов.

  • Объявление минимального API уровня (версии Android), необходимого для приложения.

  • Объявление аппаратных и программных требований, такие как камера, Bluetooth, или мультитач экран.

  • API библиотек с которыми приложение будет связываться, например библиотеки Google Maps.

Но все же основная задача манифеста сообщить системе о компонентах приложения. Например, можно объявить Activity (деятельность) следующим образом:

В элементе атрибут Android:icon указывает на ресурсы для иконки приложения.

В элементе атрибут Android:name определяет полный путь на имя класса Activity (деятельности), а атрибут Android:label задаёт заголовок приложения.

Для определения компонентов используются:
для Activity (деятельности)
для Service (сервисы)
для Broadcast reciever (получатели широковещательных сообщений)
Для Content providers (поставщики данных)

Activity (деятельность), Service (сервис) и Content provider (поставщики данных), которые существуют в исходниках, но не заявлены в манифесте не видны системе и, следовательно, не смогут запуститься. Однако, Broadcast provider (получатель широковещательных сообщений) может создаваться динамически в коде (как объекты BroadcastReceiver) и регистрироваться с помощью вызова registerReceiver ().

Объявление возможностей компонента
Как уже говорилось в разделе «Активация компонентов», для вызова Activity (деятельность), Service (сервис) и Broadcast receiver (получатель широковещательных сообщений) можно использовать класс Intent. Сделать это можно явно, задав конкретное имя компонента, или не явно, а этом случае описывается только тип действия, который нужно выполнить (и, возможно, данные, необходимые для него). Система сама находит компонент устройства, который может выполнить действия и запускает его. Если найдено несколько подходящих компонентов, то пользователь выбирает, какой из них использовать.

Система определяет компоненты, которые могут реагировать на намерение путём сравнения полученного Intent (намерения), с Intent filters (фильтр намерений), определённых в файлах манифеста других приложений.

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

Например, приложение электронной почты с Activity (деятельностью) для создания новых сообщений может объявить Intent filter (фильтр намерения) в своём файле манифеста запускаться на запрос "send" (отправить). Activity (деятельность) в стороннем приложении создаёт Intent (намерение) с типом действия "send" (ACTION_SEND), которое система сопоставит с приложением электронной почты и запустит нужную Activity (деятельность).

Объявление требований приложений
Существует большое количество устройств, работающий под управлением системы Android, однако, не все они обеспечивают одинаковые функции и возможности. Чтобы не позволить установить приложение на устройство, в котором отсутствуют необходимые функции, необходимо объявить аппаратные и программные требования в файле манифеста. Большинство из этих заявлений существуют исключительно для ознакомления и система не читает их, однако внешние сервисы, таких как Android Market используют их, чтобы обеспечить фильтрацию для пользователей, которые ищут приложения для своего устройства.

Например, если приложение требует камеру и использует API, введённые в Android версии 2.1 (API уровень 7), надо записать эти требования в файл манифеста. Таким образом, устройства, которые не имеют камеру или с версией Android ниже, чем 2.1 не смогут установить приложение из Android Market.

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

При проектировании и разработке приложения, необходимо учитывать:

Размер экрана и плотность
Android определяет две характеристики экрана для устройства: размер экрана (физические размеры экрана) и плотность (плотность пикселей на экране, или dpi (dots per inch - точек на дюйм). Для упрощения Android обобщает их в отдельных группы

Размер: small (маленький), normal (средний), large (большой), and extra large (очень большой).
Плотность: low density (низкая), medium density (средняя), high density (высокая), and extra high density (очень высокая).

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

Средства ввода
Устройства могут иметь различные средства для ввода, такие как аппаратная клавиатура, трекбол или джойстик. Если приложение требует определённое оборудование для ввода, то необходимо объявить это в манифесте в элементе . Однако, в большинстве случаев приложения поддерживают любое средство ввода.

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

Версия платформы
Устройства работают на разных версиях платформы Android. Каждая последующая версия часто включает в себя дополнительные интерфейсы API, которые не доступны в предыдущей версии. Для того, чтобы указать, какой набор API-интерфейсов доступен, каждой версии платформы соответствует API уровень (например, Android 1.0 — 1 уровень API, Android 2.3 — 9 уровень). Если в приложении используются API, которые были добавлены к платформе после определённой версии, необходимо объявить минимальный уровень API с помощью элемента .

Ресурсы приложения
Приложения Android состоят не только из исходного кода, но также из ресурсов для визуального представления, такие как изображения или звуковые файлы. Для приложения необходимо определить меню, стили, цвета и разметку пользовательского интерфейса в файлах XML. Использование ресурсов даёт возможность изменять некоторые части приложения без модификации исходного кода, а также позволяет оптимизировать приложение для различных устройств (с различным языком интерфейса или размером экрана).

Для каждого ресурса, включённого в проект Android, SDK определяет уникальный идентификатор (целое число), которое можно использовать для ссылки на ресурс из кода или из других ресурсов определённых в XML. Например, если приложение содержит изображение с именем logo.png (сохранённое в директории res/drawable), SDK сгенерирует идентификатор ресурса R.drawable.logo, которое можно использовать для ссылки на изображение.

Главным достоинством отдельного хранения исходного кода и ресурсов является возможность создать разные ресурсы для разных аппаратных конфигураций. Например, строки интерфейса для разных языков можно определять в различных xml файлах (они хранятся например в директории res/values-fr/ для французского языка). В зависимости от выбранного пользователем языка система Android подставляет нужные строки в интерфейс.

Android поддерживает множество классификаторов для альтернативных ресурсов. Классификатор это короткая строка в название директории ресурсов для определения когда эти ресурсы должны быть использованы. Часто создаются различные схемы интерфейса для разных размеров и ориентаций экранов устройства. Например, при портретной ориентации кнопки удобнее разместить по вертикали, а для альбомной ориентации - по горизонтали. Чтобы изменить расположение в зависимости от ориентации, можно определить две различные схемы и добавить соответствующие классификаторы к имени каталога каждого макета. Тогда, система автоматически применяет соответствующий макет в зависимости от текущей ориентации устройства.