[Android]App之间发送和接收广播
•
移动开发
这里使用不同模块来实现app之间的广播通信,以两个app为例,通过点击按钮来实现的~
1. broad模块 – 忽略BootCompleteReceiver和MainActivity(这是其他的~)
![[Android]App之间发送和接收广播](/img/02/e26e5b9c62da4b6d94e7fc26e6cd24db.png)
![[Android]App之间发送和接收广播](/img/d4/ccf495e1b5d44546ac435673f682310f.png)
步骤:
(1)创建 BroadOrderActivity,表示发送广播者
![[Android]App之间发送和接收广播](/img/c1/b3094c1381bf47d7b0fcce9c6676fb17.png)
![[Android]App之间发送和接收广播](/img/fd/4442200d8d184cebacee62ac9bbf7cff.png)
点击右下角的finish即完成创建
(BroadOrderActivity.java和在layout下的activity_broad_order.xml)
(2) 书写代码
这部分代码如下:
BroadOrderActivity.java
package com.example.broad;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
public class BroadOrderActivity extends AppCompatActivity implements View.OnClickListener {
private BroadOrderReceiver broadOrderReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_broad_order);
findViewById(R.id.btn_send_a).setOnClickListener(this);
}
@Override
public void onClick(View view) {
Intent intent = new Intent("com.example.broad.BroadOrderReceiver");
sendOrderedBroadcast(intent,"com.example.broad.BroadOrderReceiver");
}
@Override
protected void onStart() {
super.onStart();
broadOrderReceiver = new BroadOrderReceiver();
IntentFilter filter = new IntentFilter("com.example.broad.BroadOrderReceiver");
registerReceiver(broadOrderReceiver,filter);
}
@Override
protected void onStop() {
super.onStop();
unregisterReceiver(broadOrderReceiver);
}
}
activity_broad_order.xml
(3)在同一个模块下创建一个接收者 BroadOrderReceiver
![[Android]App之间发送和接收广播](/img/d0/dcbdcf86f08948eba2c9b0ac4ea86e32.png)
![[Android]App之间发送和接收广播](/img/4d/21987930480740e0a061f05d67f3a08d.png)
同样点击右下角的finish完成创建
(4)接收者代码如下(在控制台打印消息表示接收到~):
BroadOrderReceiver.java
package com.example.broad;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class BroadOrderReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("nn","BroadOrderAReceiver接收到广播");
}
}
(5)重要的部分!我自己在这里纠结了好久,终于发现是这里的问题,才不能完成app之间通信
AndroidManifest.xml
小小提一下,主要是这里要设置用户的权限(完整代码在上面,这里就是记录一下下):
2. broadb模块 – 在我的理解中,就是另一个app
(1)创建模块
![[Android]App之间发送和接收广播](/img/f9/ea3ed3bd48b140079cc6e05c5615a170.png)
![[Android]App之间发送和接收广播](/img/9e/c2ec4076aad541678f80be4d05694f38.png)
![[Android]App之间发送和接收广播](/img/be/f5ba5b65a2444ba5a813410232237e6b.png)
![[Android]App之间发送和接收广播](/img/fb/2ad1858168934abaab734c55408c7812.png)
点击finish就完成模块的创建
(会自动生成MainActivity.java 和 activity_main.xml,只修改了MainActivity.java)
代码如下:
MainActivity.java
package com.example.broadb;
import androidx.appcompat.app.AppCompatActivity;
import android.content.IntentFilter;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
private BroadcastBReceiver broadcastBReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onStart() {
super.onStart();
broadcastBReceiver = new BroadcastBReceiver();
IntentFilter intentFilter = new IntentFilter("com.example.broad.BroadOrderReceiver");
registerReceiver(broadcastBReceiver,intentFilter);
}
@Override
protected void onStop() {
super.onStop();
unregisterReceiver(broadcastBReceiver);
}
}
(2)创建 BroadcastBReceiver
创建上一个模块一样~
这里就直接附上代码
BroadcastBReceiver.java
package com.example.broadb;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class BroadcastBReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("nn","BroadcastBReceiver收到广播");
}
}
AndroidManifest.xml
3. 结果 – 成功~
![[Android]App之间发送和接收广播](/img/83/0b85ac89aa804d3db98a89d54108ddf9.png)
本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/266bc2dd1b.html
