原文地址 zhuanlan.zhihu.com
目录收起跳过锁屏界面直接显示到界面广播判断包名所对应的应用是否安装在SD卡上获取自启动管理页面的Intent
由于安全原因,自2021年开始,所有的EMUI都不再支持 "应用启动 "设置的意图了
Android 10 (API 级别 29) 及更高版本对后台应用可启动 Activity进行限制。Android10中, 当App的Activity不在前台时,其启动Activity会被系统拦截,导致无法启动。
向用户申请 SYSTEM_ALERT_WINDOW权限,系统就不会拦截该程序后台启动的Activity。
示例代码如下:
//AndroidManifest中
//检查是否已经授予权限
if (!Settings.canDrawOverlays(this)) {
//若未授权则请求权限
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, 0);
}
其中,Settings.canDrawOverlays(this)方法是在API level 23也就是Android M中新加入的用于检查当前是否拥有出现在“出现在其他应用上”权限的方法。在6.0以前的系统版本,悬浮窗权限是默认开启的,直接使用即可。
跳过锁屏界面直接显示到界面
int flags = WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
getWindow().addFlags(flags);
添加组件
ComponentName localComponentName = new ComponentName(MyApplication.getContext(), BootReceiver.class);
int i = MyApplication.getContext().getPackageManager().getComponentEnabledSetting(localComponentName);
Log.e("自启动 >>>>", "onCreate: " + i);
以下是直接打开系统页面。若是有的android系统找不到应用设置页面(如定制系统)
Intent intent = ApplicationUtil.getAutostartSettingIntent(this);
tartActivity(intent);
/**
* 获取自启动管理页面的Intent
*
* @param context context
* @return 返回自启动管理页面的Intent
*/
public static Intent getAutostartSettingIntent(Context context) {
ComponentName componentName = null;
String brand = Build.MANUFACTURER;
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
switch (brand.toLowerCase()) {
case "samsung"