Android BroadcastReceiver,广播与进程通讯,APK安装广播,获取已安装列表

2、静态注册广播


<receiver android:name="com.administrator.receivers.MyBroadcastReceiver"

    android:exported="true"

    android:enabled="true">



    <intent-filter>

        <action android:name="com.weimore.example.MY_BROADCAST"/>

    </intent-filter>

</receiver>

3、动态注册广播


//自定义的广播接收器

MyBroadcastReceiver mReceiver = new MyBroadcastReceiver();

//过滤器,其中传入一个action

IntentFilter filter = new IntentFilter("com.weimore.example.MY_BROADCAST");

//注册广播

registerReceiver(mReceiver,filter);





需要注意的是,动态注册的广播接收器一定要注销,在onDestroy方法中调用unregisterReceiver(recevier);

4、发送广播


                //创建Intent对象

                Intent intent = new Intent();

//                Intent intent = new Intent( MainActivity.this, MyBroadcastReceiver.class);//静态注册写法

                //指定action

                intent.setAction("com.weimore.example.MY_BROADCAST");//动态注册写法

                intent.putExtra("br","llllgggqqq");

                //发送广播

                sendBroadcast(intent);

5、外部应用通过action发送广播,实现进程间通讯


                Intent intent = new Intent();

//                Intent intent = new Intent( MainActivity.this, MyBroadcastReceiver.class);

                //指定action

                intent.setAction("com.weimore.example.MY_BROADCAST");

                intent.putExtra("br","llllgggqqqweilaisssss");

                //发送广播

                sendBroadcast(intent);

6、系统广播使用


public class BluetoothReceiver extends BroadcastReceiver {



    private BaseConfigCallback mCallback;



    public BluetoothReceiver(Context context, BaseConfigCallback callback) {

        mCallback = callback;

        IntentFilter filter = new IntentFilter();



        filter.addAction(Intent.ACTION_SCREEN_OFF);

        filter.addAction(Intent.ACTION_SCREEN_ON);

        filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);



        //蓝牙开关状态

        filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);

        //蓝牙开始搜索

        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);

        //蓝牙搜索结束

        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);



        //蓝牙发现新设备(未配对)

        filter.addAction(BluetoothDevice.ACTION_FOUND);

        //设备配对状态改变

        filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);

        //设备建立连接

        filter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED);

        //设备断开连接

        filter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED);



        //BluetoothAdapter连接状态

        filter.addAction(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED);

        //BluetoothHeadset连接状态

        filter.addAction(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED);

        //BluetoothA2dp连接状态

        filter.addAction(BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED);



        context.registerReceiver(this, filter);

    }



    @Override

    public void onReceive(Context context, Intent intent) {

        String action = intent.getAction();

        Log.i("lgq","状态=-----"+action);

        BluetoothDevice dev;

        int state;

        if (action == null) {

            return;

        }

        switch (action) {

            /**

             * 蓝牙开关状态

             * int STATE_OFF = 10; //蓝牙关闭

             * int STATE_ON = 12; //蓝牙打开

             * int STATE_TURNING_OFF = 13; //蓝牙正在关闭

             * int STATE_TURNING_ON = 11; //蓝牙正在打开

             */

            case BluetoothAdapter.ACTION_STATE_CHANGED:

                state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, 0);

                mCallback.onStateSwitch(state);

                break;

            /**

             * 蓝牙开始搜索

             */

            case BluetoothAdapter.ACTION_DISCOVERY_STARTED:

                CbtLogs.i("蓝牙开始搜索");

                break;

            /**

             * 蓝牙搜索结束

             */

            case BluetoothAdapter.ACTION_DISCOVERY_FINISHED:

                CbtLogs.i("蓝牙扫描结束");

                mCallback.onScanStop();

                break;

            /**

             * 发现新设备

             */

            case BluetoothDevice.ACTION_FOUND:

                dev = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

                mCallback.onFindDevice(dev);

                break;

            /**

             * 设备配对状态改变

             * int BOND_NONE = 10; //配对没有成功

             * int BOND_BONDING = 11; //配对中

             * int BOND_BONDED = 12; //配对成功

             */

            case BluetoothDevice.ACTION_BOND_STATE_CHANGED:

                dev = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

                CbtLogs.i("设备配对状态改变:" + dev.getBondState());

                break;

            /**

             * 设备建立连接

             * int STATE_DISCONNECTED = 0; //未连接

             * int STATE_CONNECTING = 1; //连接中

             * int STATE_CONNECTED = 2; //连接成功

             */

            case BluetoothDevice.ACTION_ACL_CONNECTED:

                dev = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

                CbtLogs.i("设备建立连接:" + dev.getBondState());

                mCallback.onConnect(dev);

                break;

            /**

             * 设备断开连接

             */

            case BluetoothDevice.ACTION_ACL_DISCONNECTED:

                dev = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

                // mCallback.onConnect(dev.getBondState(), dev);

                break;

            /**

             * 本地蓝牙适配器

             * BluetoothAdapter连接状态

             */

            case BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED:

                dev = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

                CbtLogs.i("STATE: " + intent.getIntExtra(BluetoothAdapter.EXTRA_CONNECTION_STATE, 0));

                CbtLogs.i("BluetoothDevice: " + dev.getName() + ", " + dev.getAddress());

                break;

            /**

             * 提供用于手机的蓝牙耳机支持

             * BluetoothHeadset连接状态

             */

            case BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED:

                dev = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

                CbtLogs.i("STATE: " + intent.getIntExtra(BluetoothHeadset.EXTRA_STATE, 0));

                CbtLogs.i("BluetoothDevice: " + dev.getName() + ", " + dev.getAddress());

                break;

            /**

             * 定义高质量音频可以从一个设备通过蓝牙连接传输到另一个设备

             * BluetoothA2dp连接状态

             */

            case BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED:

                dev = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

                CbtLogs.i("STATE: " + intent.getIntExtra(BluetoothHeadset.EXTRA_STATE, 0));

                CbtLogs.i("BluetoothDevice: " + dev.getName() + ", " + dev.getAddress());

                break;

            default:

                break;

        }

    }

}

注册广播


private BluetoothReceiver mBluetoothReceiver;


mBluetoothReceiver = new BluetoothReceiver(mContext, this);


/**

 * 关闭服务

 */

public void onDestroy() {



    mContext.unregisterReceiver(mBluetoothReceiver);

}

APK安装广播



<!--接收apk安装事件-->

<receiver android:name=".utils.AutoStarterReceiver">

    <intent-filter>

        <action android:name="android.intent.action.PACKAGE_REPLACED" />

        <action android:name="android.intent.action.PACKAGE_ADDED" />

        <action android:name="android.intent.action.PACKAGE_CHANGED" />

        <action android:name="android.intent.action.PACKAGE_INSTALL" />

        <action android:name="android.intent.action.PACKAGE_REMOVED" />



        <data android:scheme="package" />

    </intent-filter>

</receiver>

<uses-permission

android:name=“android.permission.MOUNT_UNMOUNT_FILESYSTEMS”

tools:ignore=“ProtectedPermissions” />

<uses-permission

android:name=“android.permission.INSTALL_PACKAGES”

tools:ignore=“ProtectedPermissions” />


/**

 * @author : LGQ

 * @date : 2020/12/10 10

 * @desc :

 */

public class AutoStarterReceiver extends BroadcastReceiver {

    @Override

    public void onReceive(Context context, Intent intent) {

        //todo 启动目标app

        Log.e("###", "接收到apk安装广播");

        Toast.makeText(context, "接收到apk安装广播", Toast.LENGTH_LONG).show();

    }

}

第一种:

Intent settintIntent = context.getPackageManager().

getLaunchIntentForPackage(“包名”);

context.startActivity(settintIntent);

第二种:

Intent intent2 = mContext.getPackageManager()

.getLaunchIntentForPackage(packagename);

String classNameString = intent2.getComponent().getClassName();//得到app类名

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值