【问题标题】:Android-Broadcast Receiver and Intent FilterAndroid-Broadcast Receiver 和 Intent Filter
【发布时间】:2023-12-21 20:09:01
【问题描述】:

我是android平台的新手。请帮助我了解广播接收器和意图过滤器在android中的行为。请用简单的行或示例进行解释。提前谢谢...

【问题讨论】:

标签: android broadcastreceiver intentfilter


【解决方案1】:

广播接收器是您的 Android 项目中的一个类,它负责接收其他活动使用 android.content.ContextWreapper.sendBroadcast(Intent intent) 发送的所有意图

在您接收活动的清单文件中,您必须声明哪个是您的广播接收器类,例如:

<receiver android:name="xyz.games.pacman.network.MessageListener">
  <intent-filter>
    <action android:name="xyz.games.pacman.controller.BROADCAST" />
  </intent-filter>
</receiver>

如您所见,您还在这里定义了意图过滤器,即广播接收者应该接收哪些意图。

然后你必须定义一个扩展广播接收器的类。这是您在清单文件中定义的类:

public class MessageListener extends BroadcastReceiver {


    /* (non-Javadoc)
     * @see android.content.BroadcastReceiver#onReceive(android.content.Context, android.content.Intent)
     */
    @Override
    public void onReceive(Context context, Intent intent) {
...
}

在这里,所有通过过滤器的意图都被接收,您可以使用方法调用中传递的参数来访问它们。

【讨论】:

  • 只是他用的那个包
【解决方案2】:

可以通过两种方式注册 BroadcastReceiver:dynamicstatic。静态只不过是通过AndroidManifest.xml 中的intent-filter 声明操作以注册新的BroadcastReceiver 类。动态正在从另一个类中注册接收器。 intent-filter 确定应接收哪个操作。

要创建广播接收器,您必须扩展广播接收器类并覆盖onReceive(Context,Intent) 方法。在这里,您可以使用Intent.getAction() 检查传入的意图并相应地执行代码。

作为一个新类,静态是

public class Reciever1 extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) { 
        String str = intent.getAction();
        if(str.equalsIgnoreCase("HELLO1")) {
            Log.d("Abrar", "reciever....");             
            new Thread() {
                public void run() {                     
                    Log.d("Abrar", "reciever....");
                    System.out.println("Abrar");                        
                }
            }.start();                          
        }

或者,如果放在现有的类中,它会被动态调用

intentFilter = new IntentFilter();
intentFilter.addAction("HELLO1");

//---register the receiver---
registerReceiver(new Reciever1(), intentFilter);    

【讨论】:

  • 如何在两台设备之间进行操作,例如从一台设备向另一台设备发送一些数据?我应该定义什么??
  • @JPerk 您需要处理连接,但是您可以定义自定义意图来接收数据。您很有可能不会使用现有的系统意图来接收自定义数据,或者不想处理它通常包含的默认数据。
【解决方案3】:

BroadcastReceiver:“网关”,您的应用通过它告诉 Android 操作系统,您的应用有兴趣接收信息。

Intent-Filter :与BroadcastReceiver 一起使用并告诉它有兴趣接收的“什么”信息。例如,您的应用想要接收有关电池电量的信息。

【讨论】:

  • 使用 WakefulBroadcastReceiver 比 BroadcastReceiver 更好吗?