android中两个app之间利用广播互相监听

本文介绍了在Android中如何实现两个应用程序通过广播进行互相监听和交互的示例。具体需求包括:App2终止时发送广播,由App1接收并启动App2;App2被卸载后,App1检测并重新安装App2。作者提供了实现这一功能的Demo,包括代码示例和项目结构说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天去面试,什么公司就不谈了,技术官直接就上需求让我思考一下,自己就写了一个小demo,效果还可以,奉献一下,源码要的邮箱,我就不上传了。

按照惯例先贴出需求:

需求:

1.apk2终止时发送广播,apk1接受,然后启动apk2。

2.主动:当apk2被卸载后,apk1查询是否卸载,然后安装apk2。

3.被动:apk2当应用被卸载后,系统发出广播,apk1接受判断后安装apk2。

自己做了一个demo,效果如下:

1.安装test1后,点击button,开始检测test2,查的没有test2,开始下载。

2.下载test2后,退出test2,提示4秒后开启test2,test2开启。

3.卸载test2,提示test1已卸载,然后4秒后重装test2。


test1项目结构:

test1项目结构

test2项目结构:

test2项目结构


一,test1部分

MainActivity的代码如下:

public class MainActivity extends Activity implements OnClickListener,BRInteraction {
   
   

    private Button app1Btn;
    private MyReceiver myReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initViews();
        initBroadcastReciver();
        setListener();
    }


------------------------------------------------------------

    //初始化broadcastreceiver
    private void initBroadcastReciver() {
        IntentFilter intentFilter1 = new IntentFilter();
        intentFilter1.addAction("app2isclosed");
        IntentFilter intentFilter2 = new IntentFilter();                                  intentFilter2.addAction("android.intent.action.PACKAGE_REMOVED");
        intentFilter2.addDataScheme("package");
        myReceiver = new MyReceiver();
        registerReceiver(myReceiver, intentFilter1);
        registerReceiver(myReceiver, intentFilter2);
    }

    //初始化view
    private void initViews() {
        app1Btn = (Button) findViewById(R.id.app1_btn);
    }

    //设置监听
    private void setListener() {
        app1Btn.setOnClickListener(this);
        myReceiver.setBRInteractionListener(this);
    }

--------------------------------------------------  

@Override
    public void onClick(View v) {

        switch (v.getId()) {
        case R.id.app1_btn:
            switchApp2();
            break;
        default:
            break;
        }
    }


    //启动app2,如果没有开始下载
    public void switchApp2() {
        if (hasApplication()) {
            ComponentName componetName = new ComponentName(
            // 这个是另外一个应用程序的包名
                    "com.example.test2",
                    // 这个参数是要启动的Activity
                    "com.example.test2.MainActivity");
            Intent intent = new Intent();
            intent.setComponent(componetName);
            startActivity(intent);
        } else {
            Toast.makeText(MainActivity.this, "没有安装test2,正在安装", Toast.LENGTH_LONG)
            .show();
            installApk();
        }
    }


    //下载app2
    @Override
    public void installApk() {
        new Handler().postDelayed(new Runnable() {
            public void run() {
                slientInstall(); // 未安装进行安装
            }
        }, 2 * 1000);
    }


    //判断是否存在test2
    public boolean hasApplication() {
        PackageMa
Android中,两个独立的应用程序(App A 和 App B)通过广播(Broadcasting)进行通信,通常涉及到以下几个关键步骤。这里我们假设App A 发送广播App B 接收广播,它们都在同一台设备上运行。 **App A(发送方)** 1. 在App A 中,首先创建一个`Intent`,包含数据广播的动作: ```java // 创建意图 Intent sendIntent = new Intent(); sendIntent.setAction("com.example.ACTION_SEND_BROADCAST"); sendIntent.putExtra("data", "12345"); // 发送广播 sendBroadcast(sendIntent); ``` 2. 在`AndroidManifest.xml`中声明接收广播的`BroadcastReceiver`: ```xml <application> <!-- ... --> <receiver android:name=".receivers.SendBroadcastReceiver"> <intent-filter> <action android:name="com.example.ACTION_SEND_BROADCAST" /> </intent-filter> </receiver> </application> ``` **App A 的 BroadcastReceiver (`SendBroadcastReceiver.java`)** ```java import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class SendBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 获取附加的数据 String data = intent.getStringExtra("data"); // 这里只是为了展示如何处理,实际应用可能有其他操作 Toast.makeText(context, "Sending broadcast with data: " + data, Toast.LENGTH_SHORT).show(); } } ``` **App B(接收方)** 在App B 中,你需要创建一个`BroadcastReceiver`来监听来自App A 的广播: ```java // App B 的 BroadcastReceiver (假设名称为ReceiveBroadcastReceiver) public class ReceiveBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String receivedData = intent.getStringExtra("data"); Log.d("AppB", "Received broadcast: " + receivedData); // 打印或进一步处理数据 } } // 在App B的AndroidManifest.xml中添加接收BroadcastReceiver <receiver android:name=".receivers.ReceiveBroadcastReceiver"> <intent-filter> <action android:name="com.example.ACTION_SEND_BROADCAST" /> </intent-filter> </receiver> ``` **相关问题--:** 1. 如何在App A 中动态改变广播的内容? 2. 如果希望广播仅在某些条件下发送,应该如何实现? 3. 怎么处理接收不到广播的情况?
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值