1、创建广播接收器:
/*** 作者:created by meixi* 邮箱:13164716840@163.com* 日期:2018/11/1 09*/
public class MyBroadcastReceiver extends BroadcastReceiver {//需要实现的方法@Overridepublic void onReceive(Context context, Intent intent) {Log.i("lgq","sssssssMyBroadcastReceiver"+intent.getStringExtra("br"));}
}
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);//静态注册写法//指定actionintent.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);//指定actionintent.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);}@Overridepublic 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.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
tools:ignore="ProtectedPermissions" />
<uses-permission
android:name="android.permission.INSTALL_PACKAGES"
tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.HIDE_INSTALL_PACKAGES" />
/*** @author : LGQ* @date : 2020/12/10 10* @desc :*/
public class AutoStarterReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {//todo 启动目标appLog.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类名
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
intent.setComponent(new ComponentName(packagename, classNameString));
mContext.startActivity(intent);
获取安装列表
private void getAppList() {PackageManager pm = getPackageManager();// Return a List of all packages that are installed on the device.List<PackageInfo> packages = pm.getInstalledPackages(0);Log.e("lgq","列表==== "+MyByteUtil.parseObjToJsonStr(packages));for (PackageInfo packageInfo : packages) {// 判断系统/非系统应用if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) // 非系统应用{System.out.println("MainActivity.getAppList, packageInfo=" + packageInfo.packageName);} else {// 系统应用}} }
public static int isNewAppVersionCode(Context context, String packageName){int appVersionCode = 0;PackageManager packageManager = context.getApplicationContext().getPackageManager();try{PackageInfo packageInfo = packageManager.getPackageInfo(packageName,PackageManager.GET_GIDS);if(packageInfo!=null){appVersionCode = packageInfo.versionCode;}}catch(Exception e) {AppLog.Loge("版本号获取失败,没办法,packageName:"+packageName);e.printStackTrace();}return appVersionCode; }