安装失败
android.injected.testOnly=false
1、创建广播接收器:
/**
* 作者:created by meixi
* 邮箱:13164716840@163.com
* 日期:2018/11/1 09
*/
public class MyBroadcastReceiver extends BroadcastReceiver {
//需要实现的方法
@Override
public 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);//静态注册写法
//指定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.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 {
@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类名
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; }