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

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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/415010.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工作205:修改记录取消文本提示ele提示

<!--<el-popoverplacement"left"title"修改记录"width"200"trigger"click"content"修改记录&#xff0c;修改记录。" </el-popover>

vue时间过滤器filter

属于个人代码整理 filters: {formatDate: function (e) {// 获取js 时间戳let time new Date().getTime();// 去掉 js 时间戳后三位time parseInt((time - e) / 1000);// 存储转换值let s;if (time < 60 * 10) {// 十分钟内return 刚刚;} else if (time < 60 * 60 &am…

查看SELinux状态

sestatus -v转载于:https://www.cnblogs.com/aiyr/p/8144724.html

Android 自定义Switch,仿微信开关键Switch

switch (changeFragmentEvent.getViewId()) {//启动设备&#xff08;安卓接收&#xff09;case 1:textView.setText("vvvvv555"changeFragmentEvent.getstring());break;case 2:textView.setText("vvvvv555WWW22");break; } 效果 实现方法 1、drawable下创…

超级好用 将html字符串,转化为纯文本

原始html字符串&#xff1a; <p style"text-indent: 2em; line-height: 1.5em;">春天像健壮的青年,有铁一般的胳膊和腰脚,他领着我们上前去</p><p><br/></p>目标纯文本&#xff1a; 春天像健壮的青年,有铁一般的胳膊和腰脚,他领着我…

知识准备(1)

网上的sql优化的知识随便一搜都有很多&#xff0c;但是很少有说为什么要这么做的。这里先引入一篇博客&#xff0c;然后我们再根据具体的每一条优化建议做分析 博客转自http://blog.csdn.net/lifuxiangcaohui/article/details/8063657 下面先列出这些法则&#xff0c;大家可以先…

Android 数据解析——Gson与json

查看json数据详情链接&#xff1a;JSON在线解析及格式化验证 - JSON.cn 相比json解析&#xff0c;Gson解析更高效简洁 先看看json解析 JSONObject object new JSONObject(s);String succ object.getString("success"); JSONArray barray object.getJSONArray(&qu…

工作207:修改表头按钮样式

<el-card><div style"display: flex;justify-content: space-between"><h1 style"float: left;margin-top: 34px;margin-left: 32px;">我的任务</h1><el-button style"float: right;margin-top: 14px;margin-right: 10p…

TextView设置缩略显示

1、代码设置 textview.setSingleLine(); textview.setEllipsiz(TextUtils.TruncateAt.valueOf("END"));2、或在xml中设置&#xff1a;android:singleLine"true"android:ellipsize"end" 转载于:https://www.cnblogs.com/ouyangping/p/8158101.htm…

zsh: command not found: service

使用 services 指令&#xff0c;请先安装 brew tap gapple/services 安装完成后使用 brew services start mysql

Android 获取设备ID,手机厂商,运营商,联网方式,获取系统语言,获取时区

权限 <uses-permission android:name"android.permission.READ_PHONE_STATE" /> 安卓6.0需动态获取权限&#xff1a;Android 6.0及以上版本动态申请权限_meixi_android的博客-CSDN博客 获取设备ID 方法1 private String getAndroidId(){String m_szAndroidI…

str和unicode类

在py2中&#xff0c;分为两类&#xff0c;str和unicode 而在py3中&#xff0c;分为两类&#xff0c;byte和str py2中的str等同于py3中的byte 首先明确一点&#xff0c;我们编辑好一段文本&#xff0c;python并不知道我们的文本是以什么格式编码的。如果是纯英文字符还好说&…

Android 带阴影背景图片

1、添加依赖 compile com.dingmouren.paletteimageview:paletteimageview:1.0.7 2、引用 <com.dingmouren.paletteimageview.PaletteImageViewandroid:id"id/palette"android:layout_width"400dp"android:layout_height"400dp"android:lay…

Android画板控件,可以写字,签名,画画并生成图片

1效果图 实现步骤 1、添加画板控件module 画板控件module下载&#xff1a;https://download.csdn.net/download/meixi_android/10774781 2、xml文件 <?xml version"1.0" encoding"utf-8"?> <LinearLayoutandroid:id"id/content_main&q…

【网络流24题】餐巾计划问题(最小费用最大流)

【网络流24题】餐巾计划问题&#xff08;最小费用最大流&#xff09; 题面 COGS 洛谷上的数据范围更大&#xff0c;而且要开longlong 题解 餐巾的来源分为两种&#xff1a; ①新买的 ②旧的拿去洗 所以&#xff0c;两种情况分别建图 先考虑第一种 因为新买餐巾没有任何限制&…

js正则表达式匹配span标签

1、js正则表达式匹配span标签 const spans htmlStr.match(/<span (.*?)>(.*?)<\/span>/g)2、js正则表达式–获取标签内的文本 function fn(str) {return str.match(/<span[^>]*>([\s\S]*?)<\/span>/)[1] }

工作209:整理订单的重置逻辑

1点击新增 2找到子组件下面的混入 3找到混入 4这一块或许就是重置逻辑

phaser设置图片资源大小

核心代码如下&#xff1a; // 加载图片资源 this.load.image(pic6, /images/phaser/img/pic6.png) const pic this.add.image(1505, 630, pic6) pic.displayWidth 100 pic.displayHeight 100