11

У меня есть будильник для моего приложения.Android - Как вызвать широковещательный приемник для вызова метода onReceive()?

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

Как вручную вызывать широковещательный приемник для выполнения кода внутри метода onReceive без повторной копии кода.

Я думал о том, что код в утилите singleton вызывает и вызывает этот метод, используя экземпляр класса из любого места.

Но это любой другой способ вызвать этот метод onReceive напрямую или иначе трансляцию намерения проблематично.

android: exported = "false" // Дополнительный параметр приемника, когда , определяющий файл манифеста.

Другой вопрос: что это за экспортируемые параметры. Пожалуйста, помогите мне понять это.

ответ

20

1. Способ запуска BroadcastReceiver вручную является вызовом

Intent intent = new Intent("com.myapp.mycustomaction"); 
sendBroadcast(intent); 

где "com.myapp.mycustomaction" это действие, указанное для вашего BroadcastReceiver в манифесте. Это можно назвать от Activity или Service.

2. Известно, что Android позволяет приложениям использовать компоненты других приложений. Таким образом, Activity s, Service s, BroadcastReceiver s и ContentProvider s моего приложения могут быть запущены внешними приложениями при условии, что атрибут android:exported = true установлен в манифесте. Если он установлен в android:exported = false, то этот компонент не может быть запущен внешним приложением. См. here.

+0

и может пожалуйста, напишите весь код ... –

+0

вы можете добавить определение фильтра намерений? OP, возможно, вызывал его явно до сих пор –

+0

Благодаря Zygotelnit. Да, я смог назвать это. –

2

Как вручную вызывать широковещательный приемник для выполнения кода внутри метода onReceive без повторного копирования кода.

Огонь BroadcastReceiver используя sendBroadcast те же действия, которые добавили в AndroidManifest.xml:

Intent intent=new Intent(CUSTOM_ACTION_STRING); 
// Add data in Intent using intent.putExtra if any required to pass 
sendBroadcast(intent); 

, что в том, что Android: экспортируется параметр означает

Как и в android:exported Doc: ли или нет широковещательный приемник может получать сообщения из источников вне своего приложения - «true», если это возможно, и «false» i е не

средство, если:

андроид: экспортироваться = истина: другого приложения также могут стрелять широковещательный приемник с помощью Действия

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

+0

И из команды 'adb shell am broadcast -a ACTION_STRING'. –

6

Необходимо указать action, который необходим для фильтрации на ОС Android, чтобы уведомить вас. т.е. внутри файла манифеста,

<receiver 
android:name="com.example.MyReceiver" 
android:enabled="true" > 
<intent-filter> 
    <action android:name="com.example.alarm.notifier" />//this should be unique string as action 
</intent-filter> 

и

всякий раз, когда вы хотите вызвать OnReceive метод передачи приемника,

Intent intent = new Intent(); 
intent.setAction("com.example.alarm.notifier"); 
sendBroadcast(intent);