Android - 如何触发广播接收器调用其onReceive()方法?

时间:2015-02-23 09:58:20

标签: android android-intent broadcastreceiver android-manifest android-broadcast

我为我的申请安排了闹钟。

我已经实现了一旦闹钟时间到达就会触发广播接收器。

如何手动调用广播接收器来执行onReceive方法内的代码,而无需复制代码两次。

我想过在实用程序单例调用中使用代码并通过从任何地方获取util类实例来调用该方法。

但是,是否有任何其他方式直接调用onReceive方法或广告意图有问题。

  

android:exported =“false”//接收器的附加参数   在清单文件中定义。

另一个问题是导出的参数是什么意思。请帮我理解这个。

4 个答案:

答案 0 :(得分:26)

1。手动启动BroadcastReceiver的方法是致电

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

其中"com.myapp.mycustomaction"是清单中为BroadcastReceiver指定的操作。这可以通过ActivityService来调用。

2. 众所周知,Android允许应用程序使用其他应用程序的组件。这样,只要属性Activity,我的应用程序的ServiceBroadcastReceiverContentProviderandroid: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:其他应用无法使用操作触发此广播接收器