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类名