registerReceiver() 和 sendBroadCast() 调用 BroadCast 接收器的主要区别是什么?

Major difference between registerReceiver() and sendBroadCast() to call the BroadCast Receivers?

当我使用广播接收器时,我对 sendBroadcastregisterReciever 等方法有点困惑。两者给出相同的结果,工作功能也相同。但是,与两者合作背后的原因是什么?

例如,如果我尝试获取电池电量的结果,我使用的编码类似于

public void onButtonClick(View view)
{
IntentFilter intentFilter=new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
BraodcastReceiver br=new BroadcastReceiver();
registerReceiver(br,intentFilter);
}

public void onButtonClick(View view)
{
Intent intent=new Intent(Intent.ACTION_BATTERY_CHANGED);
sendBroadcast(intent);
}

这两种方法有什么区别?他们将如何工作?能不能给个理由?

我的广播接收器class:

public class MyBroadcastClass extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        int level= intent.getIntExtra(BatteryManager.EXTRA_LEVEL,0);
       Log.d("BatteryLevel",level);

    }
}  

首先你要明白什么是android中的broadcast receiver。

This one example

稍后我会解释。

第一个例子,顾名思义就是注册。因此,在注册了一个特定的广播之后,它会监听任何带有 ACTION 的广播,你用 intentFilter 提供了它。作用同回调机制

第二个例子是发送广播。发送广播意味着你广播了一些东西,比如电池变化(OS 级别),它将以 ACTION 广播。

SO 发送广播将使用 Action 发送一些数据,如果我们使用 Action 收听广播然后它将在 BroadcastRecicver class

我建议您阅读开发者文档 https://developer.android.com/reference/android/content/BroadcastReceiver.html

你会明白的。

来回答你的问题

registerReceiver() 用于将您的广播接收器注册到特定操作,例如 - Intent.ACTION_BATTERY_CHANGED 或者您可以定义自己的。

这意味着每当任何应用程序将向此操作发送广播(使用 sendBroadcast() 方法发送)时,您的广播接收器 onReceive() 方法将被调用。