Android - How to trigger a Broadcast Receiver to call its onReceive() method?

前端 未结 4 718
天命终不由人
天命终不由人 2021-02-18 21:46

I have scheduled alarm for my application.

I have implemented broadcast receiver to be triggered once the alarm time reaches.

How to manually call broadcast re

相关标签:
4条回答
  • 2021-02-18 22:11

    How to manually call broadcast receiver to execute the code inside of onReceive method without replicating the code twice.

    Fire BroadcastReceiver using sendBroadcast same action which added in AndroidManifest.xml :

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

    what is that android:exported parameter means

    As in android:exported doc : Whether or not the broadcast receiver can receive messages from sources outside its application — "true" if it can, and "false" if not

    Means if:

    android:exported=true: other application also able to fire this broadcast receiver using action

    android:exported=false: other application not able to fire this broadcast receiver using action

    0 讨论(0)
  • 2021-02-18 22:14

    Here is a more type-safe solution:

    • 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);
      
    0 讨论(0)
  • 2021-02-18 22:24

    You need to mention the action which is required to be filter by Android OS to notify you. i.e.: inside manifest file,

    <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>
    

    and

    whenever you want to call broadcast receiver's onReceive method,

    Intent intent = new Intent();
    intent.setAction("com.example.alarm.notifier");
    sendBroadcast(intent);
    
    0 讨论(0)
  • 2021-02-18 22:26

    1. The way to launch a BroadcastReceiver manually is by calling

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

    where "com.myapp.mycustomaction" is the action specified for your BroadcastReceiver in the manifest. This can be called from an Activity or a Service.

    2. It is known that Android allows applications to use components of other applications. In this way, Activitys, Services, BroadcastReceivers and ContentProviders of my application can be started by external applications, provided that the attribute android:exported = true is set in the manifest. If it is set to android:exported = false, then this component cannot be started by an external application. See here.

    0 讨论(0)
提交回复
热议问题