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"?/>
?
第一種:
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; }總結
以上是生活随笔為你收集整理的Android BroadcastReceiver,广播与进程通讯,APK安装广播,获取已安装列表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP第三天!!黑人无表情 面向对象的特
- 下一篇: 单播、广播、组播、多播