700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Android BroadcastReceiver 广播与进程通讯 APK安装广播 获取已安装列表

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

时间:2018-08-07 09:14:14

相关推荐

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

1、创建广播接收器:

/*** 作者:created by meixi* 邮箱:13164716840@* 日期:/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();//过滤器,其中传入一个actionIntentFilter 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-permissionandroid:name="android.permission.INTERNET"/>

<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<uses-permissionandroid: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-permissionandroid:name="android.permission.HIDE_INSTALL_PACKAGES"/>

/*** @author : LGQ* @date : /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;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。