我为我的申请安排了闹钟。
我已经实现了一旦闹钟时间到达就会触发广播接收器。
如何手动调用广播接收器来执行onReceive方法内的代码,而无需复制代码两次。
我想过在实用程序单例调用中使用代码并通过从任何地方获取util类实例来调用该方法。
但是,是否有任何其他方式直接调用onReceive方法或广告意图有问题。
android:exported =“false”//接收器的附加参数 在清单文件中定义。
另一个问题是导出的参数是什么意思。请帮我理解这个。
答案 0 :(得分:26)
1。手动启动BroadcastReceiver
的方法是致电
Intent intent = new Intent("com.myapp.mycustomaction");
sendBroadcast(intent);
其中"com.myapp.mycustomaction"
是清单中为BroadcastReceiver
指定的操作。这可以通过Activity
或Service
来调用。
2. 众所周知,Android允许应用程序使用其他应用程序的组件。这样,只要属性Activity
,我的应用程序的Service
,BroadcastReceiver
,ContentProvider
和android:exported = true
可以由外部应用程序启动在清单中设置。如果它设置为android:exported = false
,则外部应用程序无法启动此组件。请参阅here。
答案 1 :(得分:7)
您需要提及Android操作系统需要过滤的action
来通知您。
即:
在清单文件中,
<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);
答案 2 :(得分:4)
这是一种更加类型安全的解决方案:
AndroidManifest.xml
:
<receiver android:name=".CustomBroadcastReceiver" />
CustomBroadcastReceiver.java
public class CustomBroadcastReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// do work
}
}
*.java
Intent i = new Intent(context, CustomBroadcastReceiver.class);
context.sendBroadcast(i);
答案 3 :(得分: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:exports参数意味着
与android:exported doc一样:广播接收器是否可以从其应用程序之外的来源接收消息 - 如果可以,则为“true”,如果不是,则为“false”
表示:
android:exported = true:其他应用程序也可以使用操作触发此广播接收器
android:exported = false:其他应用无法使用操作触发此广播接收器