Android的静态注册和动态注册以及跨平台的静态和动态注册的理解
何为Android广播:
Android广播就是一个全局大喇叭,就是告知,就像时校园的大喇叭,告诉学生该休息啦,该上课啦,该放学啦······就是一种告知的作用,这样的工作机制的在计算机领域有着广泛的应用。
如何写一个Android的静态注册呢?
首先第一步:
写广播的发送,简单的发送就是一个按钮,点击按钮实现发送,在主界面中写入一个简单按钮。
第二步:
在MainActivity中对按钮进行获取,然后写入点击事件代码,以及写下发送广播代码
第三步:
发送广播,自己进行接收,需要一个广播器来接收广播
广播器↓↓↓
第四步:
进行选台,在AndroidManifest.xml中选择CCTV_1台。
第五步:
当然就是写接收广播代码啦,在新建的广播器中写入接收代码。
最后进行运行就完成Android简单的静态注册了
需要注意的是,安卓8.0之后的静态注册的广播是无法接收的,需要添加Intent.setComponent();,在安卓9.0之后对静态注册需要在发送端去指定app所在的包名。
又如何写一个动态注册呢?
首先一定要知道静态注册时需要在xml中进行注册的,而动态的是只需要在Java代码中进行注册的。
首先第一步:
如静态注册一样,你需要一个按钮来进行点击。
—在activity_main.xml中添加一个button控件,用来发送广播的点击事件。
第二步:
在MainActivity.java中获取button并写入点击监听事件。
第三步:
创建BroadcastReceiver
这样,动态注册完成啦。
总结:
静态注册:Activity销毁了,广播仍然能收到
动态注册:当Activity销毁,广播也会失效。(因为受到生命周期的影响)
如何跨平台静态注册和动态注册?
静态注册(跨平台)
这里是需要创建两个工程的,一个进行发送,一个进行接收。
发送一方:
第一步:
在发送一方中的activity_main.xml 中添加一个button。
第二步:
在发送方的MainActivity.java 中声明并且写入点击监听事件
接收一方:
第一步:
在activity_main.xml 中添加一个TextView,用来接收发送方传来的值,id为tv。
第二步:
创建BroadcastReceiver。
第三步:
在MainActivity.java 中实现广播类中的内部接口并实现其方法
第四步:
由于是接收方,我们需要在AndroidManifest.xml注册广播。
以上就是跨平台静态注册。
动态注册(跨平台)
同样是需要建立两个工程。
发送一方:
第一步:
在activity_main.xml 中添加一个button。代码如下:
<Button
android:id="@+id/btn1"
android:text="发送"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
第二步:
在MainActivity.java 中动态注册广播并发送,代码如下:
public class MainActivity extends AppCompatActivity implements public class MainActivity extends AppCompatActivity {
private MyReceiver broad = new MyReceiver();
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
IntentFilter filter = new IntentFilter(“HAO_PENG1”);
registerReceiver(broad, filter);
findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction(“HAO_PENG1”);
intent.putExtra(“key”,“动态传输数据”);
sendBroadcast(intent);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(broad);
}
}
接收一方:
第一步:
在activity_main.xml 中添加一个TextView,代码如下:
<TextView
android:id="@+id/tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:textSize="25sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
第二步:
创建BroadcastReceiver,代码如下:
public class MyReceiver extends BroadcastReceiver {
private DaiLi daiLi;
@Override
public void onReceive(Context context, Intent intent) {
daiLi.xieRu(intent.getStringExtra("key"));
}
public void chuanDi(DaiLi d) {
daiLi = d;
}
public interface DaiLi {
void xieRu(String s);
}
}
第三步:
在MainActivity.java 中实现广播类中的内部接口并实现其方法,代码如下:
public class MainActivity extends AppCompatActivity implements MyReceier.DaiLi{
private MyReceier myReceier = new MyReceier();
private TextView tv1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
IntentFilter filter = new IntentFilter(“HAO_PENG1”);
registerReceiver(myReceier, filter);
myReceier.chuanDi(this);
tv1 = findViewById(R.id.tv1);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myReceier);
}
@Override
public void get(String s) {
tv1.setText(s);
}
}
如上就是我对于Android的静态注册和动态注册以及跨平台的静态和动态注册的理解。
授课老师金庭波老师的悉心教导。